为了实现兼容,编译器会实现由 __attribute__ (( keyword)) 或 [[ keyword]] 调用的以下属性:
always_inline-等效于 #pragma inline 和 -xinline |
noinline-等效于 #pragma no_inline 和 -xinline |
pure-等效于 #pragma does_not_write_global_data |
const-等效于 #pragma no_side_effect |
malloc-等效于 #pragma returns_new_memory |
constructor-等效于 #pragma init |
destructor-等效于 #pragma fini |
weak-等效于 #pragma weak |
noreturn-等效于 #pragma does_not_return |
visibility |
returns_twice |
packed - 请参见下文 |
atomic |
outer |
relaxed |
mode |
aligned |
strong |
此属性附加于 struct 或 union 类型定义中,它指定结构或联合的每个成员(除了零宽度位字段)的放置,以最大限度地减小所需内存。附加于 enum 定义时,此属性指示应使用最小的整数类型。
为 struct 和 union 类型指定此属性等效于对每个结构或联合成员指定 packed 属性。
在以下示例中,struct my_packed_struct 的成员紧紧打包在一起,但其成员的内部布局并不打包。为此,还需要打包 struct my_unpacked_struct。
struct my_unpacked_struct { char c; int i; ; struct __attribute__ ((__packed__)) my_packed_struct { char c; int i; struct my_unpacked_struct s; }; |
只能对 enum、struct 或 union 的定义指定此属性,不能对未定义枚举类型、结构或联合的 typedef 指定此属性。