有没有其他方法可以用 C++ 编写这个?我很好奇是否有一种方法可以在不使用预处理器宏的情况下保持可读性。这是 C++ 2014。 #define FUNC_ATTRIBUTE __inline__ __other_attribute___ void FUNC_ATTRIBUTE FUNC_NAME(void);

确实有。您可以将宏的所有用法替换为宏将扩展到的文本。所以在这种情况下你同样可以写: void __inline__ __other_attribute___ FUNC_NAME(void); 请注意,您永远不应__inline__在标准 C++ 中使用。请改用关键字inline。

究竟是什么__other_attribute___?

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

怎么样[[other_attribute]]?

@Geoffroy 如果“other_attribute”是标准属性,那么这是一个选项(C++11 起)。否则,您需要在属性前加上一个定义为“命名空间”的实现:[[gnu::other_attribute]]。此外,标准属性语法只允许将属性放在返回类型之前;不之后。

我想为属性设置别名,因为这些通用属性将应用于很多功能。它还使宏的可读性和可移植性更高。

@GeorgeWu 您可以为此使用宏。此类别名没有其他语言功能。

谢谢@eerorika。我想知道 C++ 是否为此提供了替代方案。特别是因为 C++ 具有多种语言功能,可以删除宏的大部分用例。