Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我在C中使用#define作为关键字吗? 我试图在C++中使用下面的代码。有人能告诉我为什么它显示错误吗 #define def namespace; using def std; int main(){ return 0; }_C++_C_Macros_Macrodef - Fatal编程技术网

为什么可以';我在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