在auto函数中放置gcc函数属性的位置

时间:2016-12-15 08:52:44

标签: c++ function gcc attributes auto

我正在尝试在具有尾随类型的自动函数上使用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
  ;

1 个答案:

答案 0 :(得分:1)

似乎允许在函数声明前使用attribute关键字。

我在gcc属性语法spec中找到了以下规则:

  

属性说明符列表可以使用单个说明符和限定符列表,在多个标识符的声明中以逗号分隔的声明符列表中的声明符(不是第一个)之前出现。

  

属性说明符列表可能出现在逗号之前,=或分号终止除函数定义之外的标识符的声明。这些属性说明符适用于声明的对象或函数。