【问题标题】:Why do libraries create macro aliases for c++ keywords?为什么库要为 c++ 关键字创建宏别名?
【发布时间】:2020-11-29 22:44:05
【问题描述】:

我经常在大型库中看到类似于以下的代码:

#define MY_CONSTEXPR constexpr
#define MY_NOEXCEPT noexcept
#define MY_NODISCARD [[nodiscard]]
etc.

为这些关键字创建别名的目的/好处是什么?我经常看到这种情况,但找不到任何关于这种做法的信息。如果我不得不猜测,原因是你可以有条件地编译你是否希望这些关键字出现在你的编译中。

【问题讨论】:

  • 使该代码与不支持这些关键字的旧编译器兼容
  • @Slava 或支持使用非标准扩展支持它们的编译器

标签: c++ macros keyword


【解决方案1】:

为这些关键字创建别名的目的/好处是什么?一世 相当普遍地看到这个,但找不到任何关于 实践。如果我不得不猜测,原因是你可以有条件地 compile 你是否希望这些关键字出现在你的编译中。

是的,通常是这样。您可能还会看到类似的定义,但替换文本为空,例如

#define MY_CONST

,它涵盖了您不希望使用关键字的情况。

更大的图景是,这有助于与各种语言版本和各种编译器兼容。这样的定义可以在构建库时编写(通常适合用于构建它的工具链),或者它们可能包含在条件编译指令中,这些指令试图在客户端程序运行时决定如何定义宏编译。

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 2012-07-02
    • 1970-01-01
    • 2019-12-05
    • 2014-03-14
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多