【发布时间】:2011-10-25 05:26:24
【问题描述】:
根据我以前学习C的知识,我知道像#include,#define这样的预处理指令不是一个语句,这就是为什么顾名思义,它是程序之前的过程已编译,因此我们无需在其末尾附加;。
在 C++ 中,它向我介绍了一个新指令 using ,但为什么这个指令会附加分号?我以为它就像我之前学习的指令一样,它不是一个声明?
【问题讨论】:
标签: c++ c-preprocessor preprocessor-directive
根据我以前学习C的知识,我知道像#include,#define这样的预处理指令不是一个语句,这就是为什么顾名思义,它是程序之前的过程已编译,因此我们无需在其末尾附加;。
在 C++ 中,它向我介绍了一个新指令 using ,但为什么这个指令会附加分号?我以为它就像我之前学习的指令一样,它不是一个声明?
【问题讨论】:
标签: c++ c-preprocessor preprocessor-directive
using 不是预处理器指令。它被编译器正确地看到和分析。
您经常不在#define 宏的末尾添加; 的事实是因为它们被预处理器作为“简单”文本替换处理,例如:
#define SOMETHING "abcd";
...
if (strcmp(thing, SOMETHING) == 0) { ... }
...
将是编译器错误,因为编译器会看到:
if (strcmp(thing, "abcd";) == 0) { ... }
// ^ invalid here
【讨论】:
using 可以被认为是一个声明,例如typedef 是。
您可以要求编译器输出预处理的结果,例如用g++ -C -E但是没有简单的方法让它输出using的效果
【讨论】: