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