Oracle Solaris Studio 12.2:C++ 用户指南

4.11 支持的属性

为了实现兼容,编译器会实现由 __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

4.11.1 __packed__

此属性附加于 structunion 类型定义中,它指定结构或联合的每个成员(除了零宽度位字段)的放置,以最大限度地减小所需内存。附加于 enum 定义时,此属性指示应使用最小的整数类型。

structunion 类型指定此属性等效于对每个结构或联合成员指定 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;
};

只能对 enumstructunion 的定义指定此属性,不能对未定义枚举类型、结构或联合的 typedef 指定此属性。