我正在使用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,但没有开悟。
答案 0 :(得分:4)
在C99和C ++中为main隐式添加了返回0。默认标准(gnu90)可能也会这样做。
是的,如果您使用gcc -Wall -Wextra -std = c89构建而没有在main中返回,则会收到警告。