我正在尝试在C ++中使用以下代码。有人能告诉我为什么会出现错误吗?
#define def namespace;
using def std;
int main(){
return 0;
}
虽然以下代码工作正常
#define def namespace std;
using def;
int main(){
return 0;
}
答案 0 :(得分:16)
这是因为嵌入了分号:
#define def namespace;
^
|
WHOA!
请注意#define
本身不需要分号来终止定义,因此如果使用分号,它将成为将在宏使用的任何地方插入的文本的一部分。
预处理后,第一个示例将using
行转换为:
using namespace; std;
显然有句法问题。
修复方法是删除#define
行中的尾随分号,如下所示:
#define def namespace
您应该弄清楚如何使用编译器读取预处理代码,在理解宏引起的混淆时总是有用的。