在C中使用main()
而不是int main()
是可以的,但這是一個outdated practice。但是我看到人們在C++中使用main()
而不是int main()
。如果他們使用main()
,他們的意思是void main()
如this question?爲什麼人們在C++中使用`main()`而不是`int main()`?
回答
當使用GCC的最新版本,這兩種編譯完全相同的輸出:
int main(int argc, char* argv[]) { ... }
main(int argc, char* argv[]) { ...}
我因此得出結論:int
是隱含的。
你在談論哪個'GCC'當前版本?無論如何,它不是5.x或6.x編譯器。或者,也許你是指GCC的'g ++'編譯器(而不是'gcc')。使用'g ++'並且沒有選項,它可以在不用g ++'6.3.0; 'gcc' 6.3.0的相同代碼不會在沒有警告的情況下編譯。 –
對不起,你是對的 - g ++,特別是:'g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.4)5.4.0 20160609' – Scovetta
我有點驚訝地發現它在G ++的默認選項下無警告地編譯;我知道它不會在GCC下。它需要一個'-pedantic'或'-Wall'或類似的東西來引發來自'g ++'的警告 - 即使是'-std = C++ 11'或'-std = C++ 14'也是不夠的。我想它仍然是可以允許的,因爲它在實踐中仍然很普遍,而且它在實踐中部分流行,因爲在默認選項下它仍然是允許的。儘管任何人正在編譯沒有「WALL」或更嚴格的選項是任何人的猜測。 –
有意思。我明白你的問題彼得。 但現在一天沒有人使用main()聲明而沒有原型。 你問的問題是關於舊的c標準,但我們在c標準11.所以不要期望舊的main()聲明。舊的c標準如果函數沒有返回任何內容,那麼他們用來假定返回一個整數。希望這可以解釋你的問題。 如果你有更多的疑問,請參考 檢查出鏈接 http://ee.hawaii.edu/~tep/EE160/Book/chapapx/node7.html 我認爲它用來返回 所以用同樣的方式,C++標準可能支持舊標準。
你現在找到最常見的聲明是
INT主(INT ARGC,字符** argv的) 或 INT主() 或 無效的主要()
檢出http://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c – venky513
- 1. 爲什麼int main(){return main(); }導致stackoverflow而不是尾遞歸?
- 2. 爲什麼c允許main(),即使它不是int main()或void main()?
- 3. 爲什麼在Python中使用「if __name __ =='__ main__':main()」而不是簡單的「main()」?
- 4. 爲什麼使用def main()?
- 5. 使用int而不是字符串:public static void main(int [] args)
- 6. auto main() - > int是什麼意思?
- 7. 爲什麼我們在MIPS彙編語言中使用.globl main?
- 8. 爲什麼'的main(){的putchar(&main);}`輸出`×`
- 9. 爲什麼我們在C中有main的多個聲明?
- 10. 在C:主()和int main()的
- 11. 什麼應該是C++中int main的參數/聲明?
- 12. 爲什麼main()函數的argc在ESP + 4而不是ESP + 0?
- 13. main()遞歸調用main() - gdb backtrace不顯示多個main()幀 - 爲什麼?
- 14. main()中的'i'類型。爲什麼它是一個int&?
- 15. 在C++中使用int main(int argc,char ** argv)
- 16. 重新定義int main()C++
- 17. 何時調用main而不是調用main?
- 18. 與main()相當的Objective-C是什麼?
- 19. int main(void)在C++中有效嗎?
- 20. C main vs Java main
- 21. Hello.c:函數'main':Hello.c:13:warning:'main'的返回類型不是'int'?
- 22. 爲什麼main不被聲明爲extern
- 23. NodeJS中main()的用途是什麼?
- 24. 爲什麼我們在枚舉中寫入Integer而不是int?
- 25. 爲什麼在調用main()時出錯?
- 26. 什麼是人們在Windows 8中使用而不是IMultiValueConverters?
- 27. int main()和void main()如何工作
- 28. 在C/C++中從main()返回值的目的是什麼?
- 29. 爲什麼C++沒有在啓動雙重main()或類似的,只有int/void main()?
- 30. 爲什麼鏈接器找不到main()?
AFAIK,它是非標準的,並會導致編譯錯誤,如果你的警告足夠高。我會想象編譯器支持它的原因是遺留的,例如C++與ANSI C兼容的事實,它在當時需要支持傳統的C代碼,它沒有初始的'int',所以它可能級聯到現代C++編譯器。但這就是我的猜測,我可能是錯的。 – Qix
如果它來自C,隱式返回類型將是'int',而不是'void',所以它比'void main'更正確。儘管如此,仍然很醜。自第一個ANSI C標準以來,隱式返回類型一直被忽視。 – ShadowRanger
即使在C語言中,現代C編譯器只能在向後兼容模式下工作時接受'main()' - 而不是'int main()'。 GCC 5.x及更高版本默認爲C11模式,其中'plain'main()不可接受,而GCC 4.x和更早版本默認爲C90模式,在那裏它是可以的。自90年代初期以來,它(簡單的'main()')在'標準'(嚴格)C++中並沒有確定。一些編譯器可能仍然允許它(同樣,出於向後兼容的原因),但它並不正確。因此,任何在現代代碼中編寫簡單的'main()'的人都會犯這個錯誤。任何在舊代碼中遇到簡單的'main()'的人都應該更新它。 –