c++:_attribute_ 使用:

GNU C的一大特色(卻不被初學者所知)就是attribute機制。attribute可以設置函數屬性(Function Attribute)、變量屬性(Variable Attribute)和類型屬性(Type Attribute)。
attribute書寫特徵是:attribute前後都有兩個下劃線,並切後面會緊跟一對原括弧,括弧裏面是相應的attribute參數。
attribute語法格式爲:
attribute ((attribute-list))
其位置約束爲:
放於聲明的尾部“;”之前。
函數屬性(Function Attribute)
函數屬性可以幫助開發者把一些特性添加到函數聲明中,從而可以使編譯器在錯誤檢查方面的功能更強大。attribute機制也很容易同非GNU應用程序做到兼容之功效。
GNU CC需要使用 –Wall編譯器來擊活該功能,這是控制警告信息的一個很好的方式。下面介紹幾個常見的屬性參數。
描述函數屬性的幾個重要的關鍵字:

void noreturnfun() attribute((noreturn));//函數不會返回。
void centon() attribute((alias(“__centon”)));//設置函數別名,函數是__cencon,別名是centon.
void main_enter() attribute((constructor));//main_enter函數在進入main函數前調用
void main_exit() attribute((destructor));//main_exit函數在main函數返回後調用
void fun() attribute ((noinline));//fun函數不能作爲inline函數優化
void fun() attribute ((section(“specials”)));//將函數放到specials段中,而不是通常的text段中
no_instrument_function、constructor和destructor關鍵字主要用於剖析(profiling)源代碼的。
attribute(format(archetype,string-index,first-to-check)): format attribute提供了依照printf, scanf, strftime, strfmon類型函數的參數格式對目標函數進行類型的檢查.
attribute((weak)): weak symbol,弱符號. 若存在兩個相同的全局符號時,會引發重定義錯誤. 如果使用weak attribute,則當weak symbol和non-weak symbol同時存在的時候,linker會使用non-weak symbol.若只有weak symbol存在的時候則只使用weak symbol.
attribute((deprecated)): deprecated,棄用. 如果在源文件在任何地方地方使用deprecated attribute函數,編譯器將會發出警告.
attribute((aligned(ALIGNMENT))): 指定變量或結構體最小字節對齊數,以byte爲單位.ALIGNMENT: 指定的字節對齊操作數.
attribute((cleanup(cleanup_function)): 當一個變量的作用域消失時,便會執行後面的clean_function函數.
attribute((packed)): 使變量或者是結構體按照最小的對齊方式,對於變量是1byte對齊,對於字段,也就是field指bit對齊.

發佈了34 篇原創文章 · 獲贊 21 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章