首頁 >後端開發 >C++ >`main()` 真的是標誌 C 程式的絕對開始嗎?

`main()` 真的是標誌 C 程式的絕對開始嗎?

Linda Hamilton
Linda Hamilton原創
2024-12-13 22:45:20755瀏覽

Does `main()` Truly Mark the Absolute Beginning of a C   Program?

Main() 被誤解為C 中的絕對開始

與普遍看法相反,$3.6.1/ 節中的C 標準1 ,透過宣告“程式應包含一個名為main 的全域函數,它是程式的指定開始”,並不意味著前面沒有程式碼main() 的執行。相反,它將“開始”的概念建立為程序中的特定點。

為了說明這種區別,請考慮以下程式碼片段:

int square(int i) { return i*i; }
int user_main() { for ( int i = 0 ; i < 10 ; ++i ) std::cout << square(i) << endl; return 0; }
int main_ret= user_main();
int main() { return main_ret; }

此程式碼初始化全域變數main_ret 透過在呼叫 main() 函數之前執行 user_main() 來實作。儘管有這樣的執行順序,user_main() 並不被視為標準定義的程序的真正「開始」。

C 標準中「開始」的定義

問題的關鍵在於對「開始」的解釋。標準將 main() 指定為程式的“指定開始”,有效地將“開始”定義為呼叫 main() 的點。但是,它並不禁止在此指定之前執行程式碼。

對程式碼合規性的影響

根據這個解釋,給定的程式碼片段完全符合C 標準。即使 user_main() 在 main() 之前執行,程式的「開始」仍然在 main() 被呼叫的地方。

結論

雖然看起來可能直覺上 main() 應該是 C 程序的絕對開始,但標準採用了不同的定義。它將 main() 建立為程式「啟動」的指定點,以便進一步執行和規範。

以上是`main()` 真的是標誌 C 程式的絕對開始嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn