我可以在 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 中,我们不能在任何翻译单元中这样做,对吧?