2010-04-01 386 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將導致編譯器發出錯誤。