如何为main(),gcc 4.3启用警告“控制到达非空函数的结尾”

时间:2011-09-20 21:46:40

标签: gcc compiler-warnings

我正在使用gcc -O -Wall -Wextra来帮助学生找到代码中的错误。想象一下,当这段永远不会从main()返回值的代码没有警告时,我感到很惊讶:

int main(int argc, char* argv[]){
  if(argc > 2)
    fprintf(stderr, "Too many arguments\n");
  else if(argc == 2){
    FILE* file = fopen(argv[1], "r");
    if(file != NULL)
      doSomethingNifty(file);
    else
      fprintf(stderr, "File unable to be opened\n");
  }
  else{
    soSomethingNifty(stdin);
  }
}

在尝试了我能想到的所有其他内容之后,我终于尝试更改了该函数的名称。如果我称之为maim,我会得到我期望的结果:

mumble.c: In function 'maim':
mumble.c:45: error: control reaches end of non-void function

显然,我们在C99标准委员会的自由软件基金会的好朋友认为我的学生不希望被警告main()中的潜在错误,但仅限于其他功能。所以我的问题是:如何为main()启用此警告?

我有RTFM,但没有开悟。

1 个答案:

答案 0 :(得分:4)

在C99和C ++中为main隐式添加了返回0。默认标准(gnu90)可能也会这样做。

是的,如果您使用gcc -Wall -Wextra -std = c89构建而没有在main中返回,则会收到警告。