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中文網其他相關文章!