【问题标题】:Alternative way to write gcc attributes for functions for C++ functions?为 C++ 函数编写 gcc 属性的替代方法?
【发布时间】:2020-03-16 17:56:15
【问题描述】:

是否有替代方法可以用 C++ 编写此代码?我很好奇是否有办法在不使用预处理器宏的情况下保持可读性。这是 C++ 2014。

#define FUNC_ATTRIBUTE __inline__ __other_attribute___

void FUNC_ATTRIBUTE FUNC_NAME(void);

【问题讨论】:

  • __other_attribute___ 到底是什么?
  • 您可以添加到函数中的其他编译器属性。我只是想发布一个通用的例子。

标签: c++ gcc c-preprocessor


【解决方案1】:

确实有。您可以将宏的所有用法替换为宏将扩展为的文本。所以在这种情况下,你同样可以写得很好:

void __inline__ __other_attribute___
FUNC_NAME(void);

请注意,您永远不应在标准 C++ 中使用 __inline__。请改用关键字inline

【讨论】:

  • [[other_attribute]] 呢?
  • @Geoffroy 如果“other_attribute”是标准属性,那么这是一个选项(自 C++11 起)。否则,您需要在属性前面加上实现定义的“命名空间”:[[gnu::other_attribute]]。此外,标准属性语法只允许将属性放在返回类型之前;不是之后。
  • 我想为属性加上别名,因为这些通用属性将应用于很多函数。它还使它与宏一起更具可读性和可移植性。
  • @GeorgeWu 您可以为此使用宏。这种别名没有其他语言功能。
  • 谢谢@eerorika。我想知道 C++ 是否提供了替代方案。尤其是因为 C++ 有几个语言特性可以消除宏的大部分用例。
猜你喜欢
  • 2020-01-22
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
相关资源
最近更新 更多