我注意到尝试将defined
定义为C / C ++中的宏会产生错误:
error: "defined" cannot be used as a macro name
这对我来说并不奇怪,因为允许重新定义defined
可能会破坏类似#if defined(...)
的指令。但是,这让我想知道还有哪些其他关键字会导致编译错误 1 。我发现C++ named operators也不能在define
中使用,但是我找不到所有不可能的宏的列表。还有其他无法定义的宏吗?
1 ,同时(重新)定义诸如if
或int
之类的关键字对于预处理器可能是最糟糕的事情,但这样做不会导致编译错误。我正在寻找根本无法编译的关键字。
答案 0 :(得分:0)
每个gnu.org,“您可以将任何有效的标识符定义为宏,即使它是C关键字也是如此。预处理器对关键字一无所知。如果您希望隐藏诸如' const”来自不了解它的旧编译器。但是,预处理器运算符“ defined”永远不能定义为宏。”