[英]Why does the main function work with no return value?
這個問題是出於好奇; 在寫一個主要的測試程序,我回到從一無所有main
(沒有return
的聲明main
)。 但是我將 main 聲明為int main()
。 並且編譯成功。
好像有任何其他函數用int
返回類型編寫並且實際上不返回int
,我會得到一個錯誤
“函數名”必須返回值
那么為什么編譯器對main
函數沒有抱怨呢?
通常不允許控制流到達非空函數的末尾而不返回任何東西。 main
功能的處理方式不同,如標准中所述。
從http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2960.pdf :
§ 3.6.1/5
如果控制到達main的末尾,沒有遇到return語句,效果就是執行return 0;
至於理由,老實說,我不確定。 如果有人知道,請將其添加到我的答案中或作為評論。
在 C++ 中, int main()
可以不帶返回值,此時它默認返回 0。
5.1.2.2.3 程序終止
1 如果 main 函數的返回類型是與 int 兼容的類型,則從初始調用 main 函數的返回相當於以 main 函數返回的值作為參數調用 exit 函數;11) 到達 }終止 main 函數返回值 0。如果返回類型與 int 不兼容,則返回給宿主環境的終止狀態是未指定的。
但是你應該更好地使用EXIT_SUCCESS
或EXIT_FAILURE
從main()
返回。
即使您返回的是 int,某些操作系統 (Windows) 也會將返回值截斷為單個字節 (0-255)。 Unix 和大多數其他操作系統可能一樣。返回 EXIT_SUCCESS 或 EXIT_FAILURE 以外的任何東西都是自找麻煩
來自GNU 庫的引用
一些非 POSIX 系統對退出狀態值使用不同的約定。 為了獲得更大的可移植性,您可以分別使用宏 EXIT_SUCCESS 和 EXIT_FAILURE 作為成功和失敗的常規狀態值。 它們在文件 stdlib.h 中聲明。
— 宏:int EXIT_SUCCESS 此宏可與退出函數一起使用以指示程序成功完成。
在 POSIX 系統上,該宏的值為 0。在其他系統上,該值可能是其他(可能是非常量)整數表達式。
— 宏:int EXIT_FAILURE 此宏可與 exit 函數一起使用,以在一般意義上指示不成功的程序完成。
在 POSIX 系統上,該宏的值為 1。在其他系統上,該值可能是其他(可能是非常量)整數表達式。 其他非零狀態值也表示失敗。 某些程序使用不同的非零狀態值來指示特定類型的“不成功”。 例如,diff 使用狀態值 1 表示文件不同,使用狀態值 2 或更多表示打開文件有困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.