2012-11-24 71 views
3

可能重複的區別:
difference between main(void) and main() in c在C:主()和int main()的

我知道這是超級基本和其他一些線程已經談到了類似的問題。但是我有一本書(C的絕對新手指南),所有的代碼都寫在函數main()中。 int總是被忽略。這怎麼可能運行?這可能是一個老版本的stdio.h嗎?
下面是示例代碼:

#include <stdio.h> 

main() // not int main() 
{ 
printf("This is it\n"); 
return 0; 
} 
+7

主要區別在於時間。在1984年,可以寫'main()'。在2012年,它並不好,但許多編譯器接受它的向後兼容性。許多作者認爲它仍然是80年代中期。 –

+0

查看http://stackoverflow.com/questions/4260048/c-function-defined-as-int-but-having-no-return-statement-in-the-body-still-compi – onon15

+2

@WilliamPursell - 絕對不是這個問題的重複。這裏的問題不*與* main(void)有任何關係。 – Flexo

回答

3

我認爲c89標準將允許main()但c99和以上不會。您必須使用int main()否則。

+0

而我得到了c99。現在,爲什麼我的編譯器不喜歡它是有道理的。謝謝。 – Martin

+0

btw嘗試了這本書的C: [鏈接](http://www.amazon.com/Programming-Language-2nd-Brian-Kernighan/dp/0131103628) –

+1

其實你應該使用int main(void) '。 – effeffe

1

main()的作品,但令人困惑,在C主要函數總是返回一個int,指定退出狀態,所以正確的語法是int main(),但如果你不刻意去設置退出狀態,然後main()就夠了,但好的C書總會有int main()

1

這些類型的問題是高度依賴於標準版本的,因此一般答案沒有多大意義。

從C89草案(糾正我,如果官方C89標準是不同的,它不是自由avalaible):

稱爲在程序啓動的功能被命名爲主力。 該實現聲明此函數沒有原型。 它可與無參數來定義:

int main(void) { /*...*/ }

或具有兩個參數(此處稱爲argc和argv,儘管可以使用任何名稱,因爲它們是本地的,其中聲明它們的功能):

int main(int argc, char *argv[]) { /*...*/ }

C99和C11的標準說的一樣,但他們在添加的東西和:

或等同物; [9]或以某種其他實施方式定義的方式。

[9]因此,int可以被定義爲int的typedef名稱替代,或者argv的類型可以被寫爲char ** argv,依此類推。

在一般的東西不是從標準定義會導致不確定的行爲,這樣的代碼是UB在C89/C90,它可能是有效的C99和C11,但那是實現定義的。

P. S .:如您所見,您還應該在參數列表中添加void,沒有它的行爲定義如上。

相關問題