在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. 爲什麼使用def main()?
- 2. 使用int而不是字符串:public static void main(int [] args)
- 3. 爲什麼'的main(){的putchar(&main);}`輸出`×`
- 4. 爲什麼我們在C中有main的多個聲明?
- 5. 什麼應該是C++中int main的參數/聲明?
- 6. 爲什麼main()函數的argc在ESP + 4而不是ESP + 0?
- 7. 在C++中使用int main(int argc,char ** argv)
- 8. 與main()相當的Objective-C是什麼?
- 9. C main vs Java main
- 10. 爲什麼main不被聲明爲extern
- 11. NodeJS中main()的用途是什麼?
- 12. 爲什麼我們在枚舉中寫入Integer而不是int?
- 13. 爲什麼在調用main()時出錯?
- 14. 爲什麼main()在struts2的action類中不是必需的?
- 15. 爲什麼C++沒有在啓動雙重main()或類似的,只有int/void main()?
- 16. 在C/C++中從main()返回值的目的是什麼?
- 17. 爲什麼SetWindowsHookEx不能在CLI中使用(在main()中代碼而不是dllmain等)?
- 18. 在maven中,main/resources和main/config有什麼區別?
- 19. Main類中的「string [] args」是什麼?
- 20. 爲什麼vxWorks中沒有main()函數?
- 21. 爲什麼人們使用setTimeout(「func()」,...)而不是setTimeout(func,...)
- 22. 爲什麼人們使用i = i + 1而不是i ++?
- 23. GetTickCount()爲int main中的多個函數
- 24. 爲什麼我只在EventDispatcher中接收自定義事件而不在main中?
- 25. 爲什麼src/main/config中的hibernate.cfg.xml默認不是?
- 26. 在main()中使用NSURLConnection時,爲什麼連接無法完成?
- 27. 名單使用率不是在main() -
- 28. 爲什麼在main中隱式聲明函數? C編程
- 29. 在C中如何以及爲什麼float main()工作?
- 30. 錯誤:'int main(int,char **)'此前在C++中定義的
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()'的人都應該更新它。 –