C / C++ 中的关键字重新定义

2023-12-14

我可以在 C 中使用 #define 重新定义关键字吗?

我在 C++ 标准中发现了这一点:

ISO/IEC 14882:1998 和 ISO/IEC 14882:2003

17.4.3.1.1 宏名称 [lib.macro.names]

2 包含标题的翻译单元不应包含任何 定义在该标头中声明或定义的名称的宏。也不应 这样的翻译单元为词汇上相同的名称定义宏 关键词。

164) 不允许通过以下方式删除库宏定义 使用#undef 指令。

ISO/IEC 14882:2011

17.6.4.3.1 宏名称 [macro.names]

2 翻译单元不得在词法上#define 或#undef 名称 与关键字、表 3 中列出的标识符或 7.6 中描述的属性标记。

因此,如果我们包含标准 C++ 库中的任何头文件,我们就无法在 C++98 / C++03 中重新定义关键字,而在 C++11 中我们无法在任何翻译单元中执行此操作,对吗?


你可以吗?是的,大多数编译器不会强制阻止它。

你应该?不,(几乎)从来没有,这(通常)是一个可怕的主意。各种各样的事情都可能会崩溃,并且与大多数预处理器的废话一样,调试起来会非常困难。

因此,你能legally? No.

以同样的方式,你can具有以下开头的宏或变量__或添加东西到std::命名空间或各种其他非常糟糕的事情。然而,大多数这样的规则都有很好的理由(主要是与关键字或名称解析相关的冲突)。虽然这在物理上是可能的,但很少(如果有的话)你need to当你should.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C / C++ 中的关键字重新定义 的相关文章

随机推荐