main()
{
printf("Hello World.");
}
为什么在gcc编译器中没有产生警告,即使我们使用返回类型'int'声明main()
答案 0 :(得分:14)
因为您没有使用-Wall标志。当你这样做时,你应该得到:
foo.c:1: warning: return type defaults to ‘int’
foo.c: In function ‘main’:
foo.c:1: warning: implicit declaration of function ‘printf’
foo.c:1: warning: incompatible implicit declaration of built-in function ‘printf’
foo.c:1: warning: control reaches end of non-void function
答案 1 :(得分:2)
您是否忘记在启用警告的情况下进行编译:
gcc -Wall ...
答案 2 :(得分:1)
你的主要功能什么都不返回。所以在void main()中修改。 通常是:
int main() { printf("Hello world"); return 0; }
答案 3 :(得分:0)
没有产生警告,因为这是合法的ANSI C89。隐式假定没有指定返回类型的函数返回int
。
如果你想编译成C89,但是要注意使用隐式int,你应该传递-Wimplicit-int
作为命令行参数(或-Wall
,它会启用该警告,以及一个数字别人的)。
如果要编译为C99,则应传递-std=c99
和-pedantic-errors
,这将导致编译器在使用隐式int时发出错误。