为便于兼容,编译器实现以下属性 (__attribute__ ((keyword ))):也支持在双下划线内拼写属性关键字 __keyword__。
为已声明的函数或变量名称创建一个别名
大致等效于 #pragma align。生成警告,且在用于可变长度数组时会被忽略。
与 #pragma inline 和 -xinline 等效
当关联的变量离开作用域(退出声明它的块)时,导致执行通过此属性指定的函数。它只能应用于自动函数作用域(局部)变量,而不能应用于具有静态存储持续时间的参数或变量。该函数必须采用一个参数、一个指向与变量兼容的类型的指针。函数的返回值(如果有)将被忽略。没有定义当清除函数未正常返回时要执行的操作。
与 #pragma no_side_effect 等效
与 #pragma init 等效,不同之处在于仅调用一次构造函数。
如果在源文件中的任何位置使用该变量或函数,会生成警告。可选的参数 msg 必须是一个字符串并将包括在发出的警告消息中。
与 #pragma fini 等效
与 #pragma returns_new_memory 等效
与 #pragma no_inline 和 -xinline 等效
与 #pragma does_not_return 等效
与 #pragma does_not_write_global_data 等效
与 #pragma pack() 等效
与 #pragma unknown_control_flow 等效
设置线程局部存储模型。tls_model 参数应为以下值之一:global-dynamic、local-dynamic、initial-exec 或 local-exec。
指示变量或类型名称(使用 typedef 创建)表示一个向量。
提供链接程序作用域,如链接程序作用域说明符中所述。语法是:__attribute__((visibility(“visibility-type”))),其中 visibility-type 是以下项之一:
与 __global 链接程序作用域相同
与 __hidden 链接程序作用域相同
与 __symbolic 链接程序作用域相同
与 #pragma weak 等效
预定义的函数式宏。
__has_attribute(attr)
计算结果为 1,如果 attr 是支持的属性。否则,计算结果为 0。用法示例:
#ifndef __has_attribute // if we don't have __has_attribute, ignore it #define __has_attribute(x) 0 #endif #if __has_attribute(deprecated) #define DEPRECATED __attribute__((deprecated)) #else #define DEPRECATED // attribute "deprecated" not available #endif void DEPRECATED old_func(int); // use the attribute if available