C++ 为什么库为c+;创建宏别名+;关键词?

C++ 为什么库为c+;创建宏别名+;关键词?,c++,macros,keyword,C++,Macros,Keyword,在大型库中,我经常看到类似于以下内容的代码: #define MY_CONSTEXPR constexpr #define MY_NOEXCEPT noexcept #define MY_NODISCARD [[nodiscard]] etc. 为这些关键字创建别名的目的/好处是什么?我经常看到这种情况,但找不到任何与此相关的实践。如果我不得不猜测,原因是您可以有条件地编译,无论您是否希望这些关键字出现在编译中 为这些关键字创建别名的目的/好处是什么?我 经常看到这一点,但找不到关于 练习。如

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

#define MY_CONSTEXPR constexpr
#define MY_NOEXCEPT noexcept
#define MY_NODISCARD [[nodiscard]]
etc.
为这些关键字创建别名的目的/好处是什么?我经常看到这种情况,但找不到任何与此相关的实践。如果我不得不猜测,原因是您可以有条件地编译,无论您是否希望这些关键字出现在编译中

为这些关键字创建别名的目的/好处是什么?我 经常看到这一点,但找不到关于 练习。如果非要我猜的话,原因是你可以有条件地 编译是否希望这些关键字出现在编译中

是的,一般来说是这样。您可能还会看到类似的定义,其中包含空替换文本,例如

#define MY_CONST
,其中包括不希望使用关键字的情况

更重要的是,这有助于与该语言的各种版本以及各种编译器的兼容性。这些定义可以在构建库时编写(通常适用于用于构建库的工具链),也可以封装在条件编译指令中,这些指令试图决定如何在编译客户端程序时定义宏

为这些关键字创建别名的目的/好处是什么?我 经常看到这一点,但找不到关于 练习。如果非要我猜的话,原因是你可以有条件地 编译是否希望这些关键字出现在编译中

是的,一般来说是这样。您可能还会看到类似的定义,其中包含空替换文本,例如

#define MY_CONST
,其中包括不希望使用关键字的情况


更重要的是,这有助于与该语言的各种版本以及各种编译器的兼容性。此类定义可在构建库时编写(通常适用于用于构建库的工具链),或者它们可能被包装在条件编译指令中,这些指令试图决定在编译客户端程序时如何定义宏。

使该代码与不支持这些宏的旧编译器兼容keywords@Slava或者支持使用非标准扩展来生成代码的编译器与不支持这些功能的旧编译器兼容keywords@Slava或者支持使用非标准扩展支持它们的编译器