GCC 的 __attribute__
是一个编译器扩展特性,允许开发者在源代码中设置函数属性(function attributes)、变量属性(variable attributes)和类型属性(type attributes)。这些属性可以影响函数、变量或类型的行为。
以下是一些常见的 __attribute__
属性:
__attribute__((constructor))
和 __attribute__((destructor))
:这两个属性可以用于函数,让函数在 main 函数执行前(对于 constructor)或执行后(对于 destructor)被自动执行。
例如:
__attribute__((constructor)) void before_main()
{
printf("Before main\n");
}
__attribute__((destructor)) void after_main()
{
printf("After main\n");
}
__attribute__((packed))
:这个属性可以用于结构体和联合体,用来阻止编译器对其成员进行优化对齐,从而减小其大小。
例如:
struct __attribute__((packed)) Test
{
char a;
int b;
};
__attribute__((aligned(x)))
:这个属性可以用于变量或类型,用来指定其对齐方式。x 必须是 2
的幂,且在某些情况下必须小于或等于硬件和操作系统能够支持的最大对齐。
例如:
int x __attribute__((aligned(16))) = 0; // x 在内存中的地址将是 16 的倍数
__attribute__((noreturn))
:这个属性可以用于函数,表示该函数不返回。这可以帮助编译器优化调用此类函数的代码。
例如:
void __attribute__((noreturn)) abort_program()
{
printf("Aborting program\n");
exit(1);
}
注意:这些属性是 GCC 的特性,可能无法在其他编译器上使用。