我正在尝试在具有尾随类型的自动函数上使用gcc函数属性,但gcc编译器一直拒绝代码。我在这里的例子中基于gcc属性的位置:
https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Function-Attributes.html
// ok
int my_int_gcc_func ()
__attribute__(( abi_tag ("tag1") , weak )) //ok
;
// error
auto my_auto_gcc_func_not_working ()
__attribute__(( abi_tag ("tag2") , weak )) // error
-> int
// cant place attribute here, get different warning..
;
参考文档将属性放在函数参数后面。
我通过反复试验注意到我可以在整个函数声明前面移动属性关键字,但找不到任何正式的说明,说gcc允许/支持这个...
// ok
__attribute__(( abi_tag ("tag2") , weak )) // seems ok
auto my_auto_gcc_func_no_error ()
-> int
;
答案 0 :(得分:1)
似乎允许在函数声明前使用attribute关键字。
我在gcc
属性语法spec中找到了以下规则:
属性说明符列表可以使用单个说明符和限定符列表,在多个标识符的声明中以逗号分隔的声明符列表中的声明符(不是第一个)之前出现。
和
属性说明符列表可能出现在逗号之前,=或分号终止除函数定义之外的标识符的声明。这些属性说明符适用于声明的对象或函数。