为什么可以';我在C中使用#define作为关键字吗? 我试图在C++中使用下面的代码。有人能告诉我为什么它显示错误吗 #define def namespace; using def std; int main(){ return 0; }
而下面的代码工作正常为什么可以';我在C中使用#define作为关键字吗? 我试图在C++中使用下面的代码。有人能告诉我为什么它显示错误吗 #define def namespace; using def std; int main(){ return 0; },c++,c,macros,macrodef,C++,C,Macros,Macrodef,而下面的代码工作正常 #define def namespace std; using def; int main(){ return 0; } 这是因为嵌入了分号: #define def namespace; ^ | WHOA! 请注意,#define本身不需要分号来终止定义,因此如果使用分号,它将成为文本的一部分,将插入使用宏的任何位置 预处理后,第一个
#define def namespace std;
using def;
int main(){
return 0;
}
这是因为嵌入了分号:
#define def namespace;
^
|
WHOA!
请注意,#define
本身不需要分号来终止定义,因此如果使用分号,它将成为文本的一部分,将插入使用宏的任何位置
预处理后,第一个示例将using
行变成:
using namespace; std;
这显然有句法上的问题
修复方法是删除#define
行中的尾随分号,如下所示:
#define def namespace
您应该弄清楚如何使用编译器读取预处理的代码,这在纠正宏引起的混乱时总是很有帮助的。Wow。我没有注意到这点。@MarkGarcia:当您在预处理器方面遇到问题时,您是否可以调用它并查看其输出是值得一看的。例如,使用GNU的gcc,您可以说类似于
gcc-E program.cc | less
。您将能够看到生成的代码是否满足您的期望,以及后面的编译阶段正在处理的代码。您为什么要用自己的关键字替换标准关键字?@Luc Touraille只是想更好地使用sintax