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

时间:2013-02-14 09:29:53

标签: c++ c macros macrodef

我正在尝试在C ++中使用以下代码。有人能告诉我为什么会出现错误吗?

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

虽然以下代码工作正常

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

1 个答案:

答案 0 :(得分:16)

这是因为嵌入了分号:

#define  def namespace;
                      ^
                      |
                     WHOA!

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

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

using namespace; std;

显然有句法问题。

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

#define def namespace

您应该弄清楚如何使用编译器读取预处理代码,在理解宏引起的混淆时总是有用的。