为什么我不能在 C 语言中对关键字使用 #define?
Why can't I use #define for keywords in C?
我正试图在C++中使用以下代码。有人能告诉我为什么它显示错误吗?
#define def namespace;
using def std;
int main(){
return 0;
}
而下面的代码运行良好
#define def namespace std;
using def;
int main(){
return 0;
}
这是因为嵌入了分号:
#define def namespace;
^
|
WHOA!
请注意,#define
本身不需要分号来终止定义,因此如果使用分号,它将成为文本的一部分,将插入到使用宏的任何位置。
预处理后,第一个示例将using
行转换为:
using namespace; std;
这显然存在句法问题。
修复方法是删除#define
行中的尾随分号,如下所示:
#define def namespace
你应该弄清楚如何用编译器读取预处理的代码,这在纠正宏引起的混乱时总是很有指导意义的。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 谷歌模拟和覆盖关键字
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 如何以静态代码分析友好的方式使用 #define 防护?
- 在 c++ 中正确定义"this"关键字?
- C++相当于整数的 #define
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- C++ - 为什么这里需要'template'关键字?
- C++函数的关键字?
- 重新定义(#define)保留的c++关键字
- 为什么我不能在 C 语言中对关键字使用 #define?