gpt4 book ai didi

c++ - 我应该检查什么预处理器条件才能使用 __attribute__((const))?

转载 作者:行者123 更新时间:2023-11-30 02:14:06 26 4
gpt4 key购买 nike

我得到了一段将 __attribute__((const)) 应用于某些函数的代码。现在,我宁愿在它可用时不删除它,但另一方面,我确实想要更便携,所以 - 我想说

#if some condition here
#define ATTRIBUTE(an_attribute) __attribute__((an_attribute))
#else
#define ATTRIBUTE(an_attribute)
#endif

void foo(int x) ATTRIBUTE(const)

条件应该是什么?

注意事项:

  • 我知道,在 C++17 中,我们将 this 作为一个适当的 C++ 属性;但我不能假设使用了 C++17。事实上,让我们假设这不是为了让事情变得简单。
  • 如果您还可以回答__attribute__((pure)) 的问题,则加分。

最佳答案

GCC 在 standard attribute syntax 下提供了这些属性在 C++11 中引入:

[[gnu::const]] // or [[gnu::pure]]
void foo(int x);

从 C++17 开始,编译器需要忽略未知属性而不导致错误。实际上,编译器通常会对未知属性发出警告(当然,可以选择关闭该警告)。根据我在 Compiler Explorer 上看到的和我记得的,早于 C++17 的编译器通常也会在完全理解语法后发出警告。我要进一步测试的主要编译器是 MSVC,但 Compiler Explorer 在 MSVC 版本中并没有走得太远。

如果您已经有了宏并且不想更改它的所有用途,您可以在以下位置使用它:

#define ATTRIBUTE(an_attribute) [[gnu::an_attribute]]

如果这不是一个合理的解决方案,不幸的是,我怀疑您必须在这种情况下检查特定的编译器和版本。

关于c++ - 我应该检查什么预处理器条件才能使用 __attribute__((const))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com