簡體   English   中英

為什么 main 函數在沒有返回值的情況下工作?

[英]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_SUCCESSEXIT_FAILUREmain()返回。

即使您返回的是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM