12.12 我能否把 main() 定義為 void, 以避免擾人的 ``main無返回值" 警告?

不能。main() 必須聲明為返回 int, 且沒有參數或者接受適當類型的兩個參數。 如果你調用了 exit() 但還是有警告信息, 你可能需要插入一條冗余的 return 語句  (或者使用某種 ``未到達" 指令, 如果有的話)。

把函數聲明為 void 並不僅僅關掉了警告信息:它可能導致與調用者(對於 main(), 就是  C 運行期初始代碼) 期待的不同的函數調用/返回順序。

注意, 這裡討論的 main() 是相對於 ``宿體" 的實現; 它們不適用於 ``自立"  的實現, 因為它們可能連 main() 都沒有。但是,自立的實現相對比較少, 如果你在使用這樣的系統, 你也許已經知道了。 如果你從沒聽說過 它們之間的不同, 你可能正在使用 ``宿體" 的實現, 那我們的討論就適用。

參考資料: [ISO, 5.1.2.2.1, Sec. G.5.1]; [H&S, Sec. 20.1 p. 416]; [CT&P, Sec. 3.10 pp. 50-51]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)