该__attribute__指令是否适用于在一行上声明的所有成员?
int a, b, c;
Run Code Online (Sandbox Code Playgroud)
声明三个int变量.
int *a, b, c;
Run Code Online (Sandbox Code Playgroud)
声明变量"a"作为指向int的指针,b和c声明为int.
int __attribute__((used)) a, b, c;
Run Code Online (Sandbox Code Playgroud)
该used属性是应用于所有变量还是仅适用于a?
Yu *_*Hao 28
来自GCC:属性语法:
在使用单个说明符和限定符列表的多个标识符的声明中,以逗号分隔的声明符列表中的声明符(不是第一个)之前可以出现属性说明符列表.这些属性说明符仅适用于它们出现在其声明符之前的标识符.例如,在
Run Code Online (Sandbox Code Playgroud)__attribute__((noreturn)) void d0 (void), __attribute__((format(printf, 1, 2))) d1 (const char *, ...), d2 (void);该
noreturn属性适用于声明的所有函数; format属性仅适用于d1.
根据这个,在你的例子中:
int __attribute__((used)) a, b, c;
Run Code Online (Sandbox Code Playgroud)
该属性仅适用于a.
但如果是:
__attribute__((used)) int a, b, c;
Run Code Online (Sandbox Code Playgroud)
该属性适用于所有a,b和c.
gcc文档(6.36属性语法)说它只适用于它们出现在其声明符之前的标识符:
在使用单个说明符和限定符列表的多个标识符的声明中,以逗号分隔的声明符列表中的声明符(不是第一个)之前可以出现属性说明符列表.这些属性说明符仅适用于它们出现在其声明符之前的标识符.例如,在
Run Code Online (Sandbox Code Playgroud)__attribute__((noreturn)) void d0 (void), __attribute__((format(printf, 1, 2))) d1 (const char *, ...), d2 (void);
所以在你的例子中:
int __attribute__((used)) a, b, c;
Run Code Online (Sandbox Code Playgroud)
该属性仅适用于a.