3 回答

TA貢獻1789條經驗 獲得超8個贊
根據3.6.1 / 3中的標準,它不是:
該功能main 不得在程序中使用 (3.2)
的定義使用感:
如果對象或非重載函數的名稱出現在可能評估的表達式中,則使用該函數。

TA貢獻1835條經驗 獲得超7個贊
我會做魚,并解釋為什么這是僵尸。在C或C ++程序可以開始運行之前,必須先初始化CRT。打開stdin / out / err,調用初始化程序,諸如此類。有兩種基本策略可以完成此任務,其中包括繁重的平臺實現細節。
程序的起始地址指向CRT初始化函數,該函數最終調用main()。具有功能豐富的加載程序的全功能操作系統上常見,該加載程序可以支持可執行映像中的任意部分。
編譯器將代碼注入到main()函數中,該函數調用CRT初始化函數。啟動函數始終是main()。在有限的加載器功能的嵌入式平臺上常見。遞歸main()現在是一個問題,CRT啟動代碼將以不可預測的堆棧狀態再次調用。

TA貢獻1906條經驗 獲得超3個贊
索賠這里是它確實是明令禁止:
好吧,標準指出:
3.6.1.3
“功能主體不得在程序內使用?!?/p>
5.2.2.9
“ 除名為main的函數外,允許進行遞歸調用”
您當然可以這樣做:
int main(int argc, char* argv[]) {
return foo(argc, argv);
}
int foo(int argc, char* argv[]) {
if (some_condition) {
return foo(argc, argv);
}
return 0;
}
(請注意,我添加了一個get-out子句。我什至無法假設無限遞歸編碼,它在我身上重復出現。)
- 3 回答
- 0 關注
- 560 瀏覽
添加回答
舉報