为什么我不能在 C 语言中对关键字使用 #define?

Why can't I use #define for keywords in C?

本文关键字:关键字 #define 不能 语言 为什么      更新时间:2023-10-16

我正试图在C++中使用以下代码。有人能告诉我为什么它显示错误吗?

#define  def namespace;
using def std;
int main(){
return 0;
}

而下面的代码运行良好

#define  def namespace std;
using def;
int main(){
return 0;
}

这是因为嵌入了分号:

#define  def namespace;
                      ^
                      |
                     WHOA!

请注意,#define本身不需要分号来终止定义,因此如果使用分号,它将成为文本的一部分,将插入到使用宏的任何位置。

预处理后,第一个示例将using行转换为:

using namespace; std;

这显然存在句法问题。

修复方法是删除#define行中的尾随分号,如下所示:

#define def namespace

你应该弄清楚如何用编译器读取预处理的代码,这在纠正宏引起的混乱时总是很有指导意义的。