Oracle® Developer Studio 12.5:C 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

2.10 支持的属性

为便于兼容,编译器实现以下属性 (__attribute__ ((keyword ))):也支持在双下划线内拼写属性关键字 __keyword__

alias

为已声明的函数或变量名称创建一个别名

aligned

大致等效于 #pragma align。生成警告,且在用于可变长度数组时会被忽略。

always_inline

#pragma inline-xinline 等效

cleanup

当关联的变量离开作用域(退出声明它的块)时,导致执行通过此属性指定的函数。它只能应用于自动函数作用域(局部)变量,而不能应用于具有静态存储持续时间的参数或变量。该函数必须采用一个参数、一个指向与变量兼容的类型的指针。函数的返回值(如果有)将被忽略。没有定义当清除函数未正常返回时要执行的操作。

const

#pragma no_side_effect 等效

constructor

#pragma init 等效,不同之处在于仅调用一次构造函数。

deprecated(msg)

如果在源文件中的任何位置使用该变量或函数,会生成警告。可选的参数 msg 必须是一个字符串并将包括在发出的警告消息中。

destructor

#pragma fini 等效

malloc

#pragma returns_new_memory 等效

noinline

#pragma no_inline-xinline 等效

noreturn

#pragma does_not_return 等效

pure

#pragma does_not_write_global_data 等效

packed

#pragma pack() 等效

returns_twice

#pragma unknown_control_flow 等效

tls_model

设置线程局部存储模型。tls_model 参数应为以下值之一:global-dynamiclocal-dynamicinitial-execlocal-exec

vector_size

指示变量或类型名称(使用 typedef 创建)表示一个向量。

visibility

提供链接程序作用域,如链接程序作用域说明符中所述。语法是:__attribute__((visibility(“visibility-type”))),其中 visibility-type 是以下项之一:

default

__global 链接程序作用域相同

hidden

__hidden 链接程序作用域相同

internal

__symbolic 链接程序作用域相同

weak

#pragma weak 等效

2.10.1 __has_attribute 函数式宏

预定义的函数式宏。

__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