前言
__attribute__ 是一种指定编译条件的机制,属于GNU特性之一。该机制可以用于变量、函数和类型。
常见的weak、unused是其部分特性关键词,用于替代括号中的xxx部分。
注意:前后各有两个 _ ,表明只有在编译选项中加 -Wall时,该特性才能正常工作。
weak
用来修饰函数,表明函数为弱函数,作用如下
//int f1(){ printf 1}
int __attribute__((weak)) f1(){printf 2}
int main()
{
f1();
return 0;
}
如果f1强定义存在,则大于1;否则打印2。更具体的用法可以参考下面这个链接
https://steveyang.blog/en/2022/08/15/gnuc-c-weak-symbol-__atrribute__weak/
unused
int main()
{
int a __attribute__((unused));
return 0;
}
这样一来,即使没有使用a,在加-Wall编译时,编译器也不会报unused 的warning。
总结
这一编译特性能够更好的帮助我们做编译时的检查,更多的用法可以参考链接:
http://unixwiz.net/techtips/gnu-c-attributes.html#:~:text=One%20of%20the%20best%20%28but%20little%20known%29%20features,allow%20the%20compiler%20to%20perform%20more%20error%20checking.