GCC 编译器是否关心我们将属性语句放在声明中的位置?例如,以下是等效的:
void foobar (void) __attribute__ ((section ("bar")));
__attribute__ ((section ("bar"))) void foobar (void);
Run Code Online (Sandbox Code Playgroud)
我在这里看到它们的使用方式没有约定。有时在声明之前,有时在声明之后。
Jen*_*ens -1
这取决于什么类型的声明符应受该属性的约束。
摘自https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute-Syntax
标签属性
在 GNU C 中,属性说明符列表可能出现在标签后面的冒号之后,而不是 case 或 default 标签。如果属性说明符后紧跟分号(即标签适用于空语句),GNU C++ 仅允许标签上的属性。如果缺少分号,则 C++ 标签属性不明确,因为允许以属性列表开头的声明在 C++ 中进行标记。声明不能在 C90 或 C99 中标记,因此不会出现歧义。
枚举器属性
在 GNU C 中,属性说明符列表可以作为枚举器的一部分出现。该属性位于枚举常量之后,=(如果存在)之前。枚举器中的可选属性属于枚举常量。无法将该属性放置在常量表达式(如果存在)之后。
语句属性
在 GNU C 中,属性说明符列表可能作为 null 语句的一部分出现。该属性位于分号之前。
...
| 归档时间: |
|
| 查看次数: |
1316 次 |
| 最近记录: |