我從GNU核心utils的代碼工作,並發現無效使用()函數顯然與設置屬性「不返回的」。那麼,我正在修改函數,我希望它返回(我將呼叫移除到exit())。編譯器仍然抱怨「noreturn」函數返回,並且在使用Eclipse CDT調試器時,跳過代碼是異常的 - 我跳過了代碼行。我沒有看到在.c文件中設置的功能,並且這個.c文件沒有.h文件。這裏是C函數屬性設置(如何取消設置)用gcc
該文件是df.c.我已經重命名文件df_call.c。編譯器如何找到這個屬性?我怎樣才能解除它?
謝謝。
======= 感謝他們的幫助所有貢獻者!簡短的回答是:「GNUutils 7.4中的usage()函數在system.h中原型爲 'void usage(int status)ATTRIBUTE_NORETURN'。我的問題,但留下了修改system.h中的問題
長的答案是:。GNU C編譯器支持的功能 (見http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html),其中一個是 分配屬性「不返回的」語法是「屬性((noreturn))」 (請參閱http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute-Syntax) 但通常是宏'ATTRIBUTE_NORETURN。如果屬性設置,並在這種情況下一個 試圖從函數返回,可執行文件編譯與投訴,但 編譯和運行。然而,它會出乎意料地行爲(跳過我的案例中的 src行,可能是由於優化)。 Eclipse CDT中的調試器實際上跳過了 代碼行,導致開發人員懷疑他的感官。
你嘗試通過源__noreturn__(或ATTRIBUTE_NORETURN,這是在我的coreutils能找到在谷歌於codesearch版本Typedef的到)grepping? – 2009-08-27 19:11:59
呃,應該是__noreturn__',該死的降價。 – 2009-08-27 19:12:34
我建議在該目錄中爲'usage'做一個「grep」:) – 2009-08-27 19:19:27