简介
__attribute__((option
))是编译器对C语言的扩展,可以设置特定的函数、变量和类型的相关属性。
使用场景
主要用于优化代码,保证编码正确,优化程序逻辑,优化存储格式等,正常简单的项目都没必要使用。
属性列表(常用)
属性名称 | 作用域 (F:函数, V: 变量,T: 类型) |
含义 | 备注 |
---|---|---|---|
constructor |
F |
使被修饰的函数在main函数前被执行 | |
destructor |
F |
使被修饰的函数在main函数结束后被执行 | |
format |
F |
告诉编译器,按照printf, scanf, strftime或strfmon的参数表格式规则对该函数的参数进行检查 | |
noreturn |
F |
表示这个函数没有返回值也不能有返回值 | |
const |
F |
表示一个方法的返回值只由参数决定,如果参数不变的话,就不再调用此函数,直接返回值 | |
weak |
F |
弱函数,如果同名函数在其他地方被定义将使用其他地方的函数,当其他地方没有定义才使用该函数 | |
warn_unused_result |
F |
表明函数返回值必须被接收或使用,否则将编译报错 | 建议修饰所有返回动态内存地址和如果执行错误将导致后续流程执行并返回错误码的函数 |
cleanup() |
V |
用于修饰变量,在变量作用域结束后调用指定函数 | |
always_inline |
F |
保证代码是内联的,强制内联 | 不一定有效,具体还是得看编译器 |
section("name") |
FV |
在编译时将被修饰的函数或数据放入指定名为"name"对应的段中 | 需要修改链接脚本才能生效 |
aligned(n) |
VT |
格式化对齐,强制编译器为结构体分配空间时采用规定位对齐,不指定数字时,编译器自动选择对目标机器最优方式 | |