GNU C的一大特點就是__attribute__機制。__attribute__能夠設置函數屬性(Function Attribute)、變量屬性(Variable Attribute)和類型屬性(Type Attribute)。
關鍵字__attribute__ 也能夠對結構體(struct )或共用體(union )進行屬性設置。大體有六個參數值能夠被設定,即:aligned, packed, transparent_union, unused, deprecated 和 may_alias 。
一、aligned (alignment)
該屬性設定一個指定大小的對齊格式(以字節 爲單位),例如:
struct S {
short b[3];
} __attribute__ ((aligned (8)));
typedef int int32_t __attribute__ ((aligned (8)));
該聲明將強制編譯器確保(盡它所能)變量類 型爲struct S 或者int32_t 的變量在分配空間時採用8 字節對齊方式。
二、packed
使用該屬性對struct 或者union 類型進行定義,不使用內存對齊,packed_struct 類型的變量數組中的值將會牢牢的靠在一塊兒,aligned 屬性使被設置的對象佔用更多的空間,相反的,使用packed 能夠減少對象佔用的空間。
三、unused
使用該屬性,表示可能用不到,函數參數中使用,表示參數能夠不傳,編譯器也不會報錯
__attribute__ 能夠對函數屬性進行設置,有const,noreturn
一、
__attribute__((noreturn)) 表示函數可能沒有返回值,編譯器處理時,沒有返回值也不會報錯