__attribute__
是 GCC 和 Clang 编译器中的一种语言扩展,用于给函数、变量、类型等添加属性,以便调整编译行为和优化。以下是一些常见的 __attribute__
用法及其详细说明:
基本语法
__attribute__((attribute-list))
其中 attribute-list
是一个用逗号分隔的属性列表。
常见属性
以下是一些常用的 __attribute__
属性及其作用:
deprecated
: 标记函数为已废弃,调用时会发出警告。unused
: 标记变量为未使用,防止编译器发出未使用变量警告。noreturn
: 标记函数不返回,编译器会进行相应优化。aligned
: 指定变量的对齐方式。packed
: 指示编译器为结构体优化空间,而不是默认对齐。format
: 检查像printf
、scanf
这类函数的格式字符串。
使用语法规则
1. 对于函数
属性应放在函数声明的尾部,但在函数定义时,属性必须放在返回类型之前,甚至可以放在声明的中间部分。
声明:属性在函数名之后
void warning_func() __attribute__((deprecated));
定义:属性在返回类型之后
__attribute__((deprecated)) void warning_func() {
// 函数实现
}
2. 对于变量
属性可以放在变量声明或定义的末尾。
int unused_var __attribute__((unused));
3. 对于类型
属性可以放在类型定义的末尾。
typedef int int32 __attribute__((aligned(4)));