2010-04-01 85 views

回答

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 
+0

我没有谈论其他Warnngs ..我只是想知道为什么没有像“返回类型的主要是int”的警告,即使我编译使用gcc -Wall – 2010-04-01 06:57:26

+1

抱歉,我现在得到它..最后一行的警告是为main()本身 thanxx ... – 2010-04-01 07:01:29

+1

@Grv:如果它回答你的问题,请不要忘记接受一个答案(点击选中标记)。 – 2010-04-01 10:36:24

2

你忘了启用警告编译:

gcc -Wall ... 
1

你的主函数什么都不返回。所以在void main()中修改。 通常是:

int main() { printf("Hello world"); return 0; } 
+0

一个小评论:我从Gman在这里学到了,即使它是* int main(){..} * return 0;不需要。不知道它是否会产生警告或不适应:) – Default 2010-04-01 11:11:07

0

由于这是合法的ANSI C89,所以不会产生警告。隐式假定没有指定返回类型的函数返回int

如果您希望编译为C89,但要注意使用隐式int,则应将-Wimplicit-int作为命令行参数(或-Wall,这会启用该警告以及其他许多警告)。

如果要编译为C99,则应该通过-std=c99-pedantic-errors,如果使用隐式int将导致编译器发出错误。