亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸到C ++中的main()是否合法?

遞歸到C ++中的main()是否合法?

C++
慕桂英4014372 2019-10-11 10:47:17
我讀到C ++標準禁止在中進行遞歸main(),但是g ++編譯以下代碼時不會產生任何抱怨:int main(){    main();}誰能澄清一下?
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

根據3.6.1 / 3中的標準,它不是:


該功能main 不得在程序中使用 (3.2)


的定義使用感:


如果對象或非重載函數的名稱出現在可能評估的表達式中,則使用該函數。


查看完整回答
反對 回復 2019-10-11
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

我會做魚,并解釋為什么這是僵尸。在C或C ++程序可以開始運行之前,必須先初始化CRT。打開stdin / out / err,調用初始化程序,諸如此類。有兩種基本策略可以完成此任務,其中包括繁重的平臺實現細節。

  • 程序的起始地址指向CRT初始化函數,該函數最終調用main()。具有功能豐富的加載程序的全功能操作系統上常見,該加載程序可以支持可執行映像中的任意部分。

  • 編譯器將代碼注入到main()函數中,該函數調用CRT初始化函數。啟動函數始終是main()。在有限的加載器功能的嵌入式平臺上常見。遞歸main()現在是一個問題,CRT啟動代碼將以不可預測的堆棧狀態再次調用。


查看完整回答
反對 回復 2019-10-11
?
一只名叫tom的貓

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子句。我什至無法假設無限遞歸編碼,它在我身上重復出現。)


查看完整回答
反對 回復 2019-10-11
  • 3 回答
  • 0 關注
  • 560 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號