2

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

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

虽然以下代码工作正常

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

1 回答 1

17

这是因为嵌入的分号:

#define  def namespace;
                      ^
                      |
                     WHOA!

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

预处理后,第一个示例将把该using行变成:

using namespace; std;

这显然有句法问题。

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

#define def namespace

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

于 2013-02-14T09:31:17.503 回答