這個問題在這里已經有了答案: noreturn 的意義何在? (5 個回答) 昨天關門。
據我了解,此屬性告訴編譯器函式不回傳。當函式回傳 void 時,指定 this 有什么好處?
這兩個功能有何不同?
void foo(){}
__attribute__((noreturn)) void foo(){}
uj5u.com熱心網友回復:
這并不意味著該函式不回傳值 - 它意味著該函式根本不回傳。呼叫該函式會提供單程旅行。
在與硬體相關的編程中對此的使用有限,您不希望在呼叫方堆疊上生成任何函式呼叫開銷,因為無論如何您都不會回傳那里。
例如,當void main (void)從微控制器嵌入式系統內的 CRT 啟動代碼呼叫時 - 這些系統會一直運行,直到您插入電源,并且它們永遠不會從main(). 因此,如果此類系統的編譯器支持_Noreturn void main (void),那么就會減少浪費的堆疊空間。否則,CRT 只會將 x 位元組壓入堆疊,這些位元組將永遠保留在那里,作為死區。
它也可能用于診斷目的,例如在檢查編譯器的行為時。正如這里所做的那樣,在演示 clang 編譯器中的一些主要錯誤時。
uj5u.com熱心網友回復:
回傳型別與函式的“不回傳”行為之間沒有關系。
void回傳型別只是告訴這個函式沒有回傳值(如果它回傳)。
有些函式永遠不會回傳給呼叫者。例如一些訊息處理無限回圈,exit()用于替換當前行程的函式或函式(如exec*family)。這暗示__attribute__((noreturn))編譯器它可能會考慮對這個特定函式進行某些優化,這些優化對于不回傳的函式有效 - 例如優化呼叫此類函式的開銷(如保存呼叫者的背景關系、回傳地址等)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/410355.html
標籤:
下一篇:c中的字串不需要的字符
