編譯器是否允許消除無限循環(huán)?可以優(yōu)化編譯器刪除無限循環(huán),這不會改變?nèi)魏螖?shù)據(jù),如while(1)
/* noop */;從分析編譯器可以推導(dǎo)出的數(shù)據(jù)流圖,這樣的循環(huán)是“死代碼”而沒有任何副作用。是否刪除了C90 / C99標(biāo)準(zhǔn)禁止的無限循環(huán)?C90或C99標(biāo)準(zhǔn)是否允許編譯器刪除此類循環(huán)?更新:“Microsoft C版本6.0基本上做了這個優(yōu)化?!?,請參閱caf的鏈接。label: goto label;return 0;將轉(zhuǎn)變?yōu)閞eturn 0;
3 回答

繁星coding
TA貢獻(xiàn)1797條經(jīng)驗 獲得超4個贊
循環(huán)不是死代碼,它基本上阻止程序達(dá)到它后面的任何東西。如果刪除循環(huán),則不會發(fā)生這種情況,因此編譯器無法刪除循環(huán)。
它可能會用平臺相關(guān)的空閑指令替換它,以通知處理器線程不再執(zhí)行任何操作。
編譯器可以做的是刪除循環(huán)后出現(xiàn)的任何代碼,因為它無法訪問并且永遠(yuǎn)不會被執(zhí)行。
- 3 回答
- 0 關(guān)注
- 717 瀏覽
添加回答
舉報
0/150
提交
取消