预处理器指令“使用”

时间:2011-10-25 05:26:24

标签: c++ c-preprocessor preprocessor-directive

根据我之前学习 C 的知识,我知道像#include#define之类的预处理程序指令不是一个声明,正如其名称所暗示的那样,它是编译程序之前的过程,因此我们无需在其末尾添加;

在C ++中,它向我介绍了一个新的using指令,但为什么这个指令附加了一个分号?我认为这就像我之前的指令,我知道它不是一个声明吗?

2 个答案:

答案 0 :(得分:5)

using不是预处理程序指令。它由编译器正确看待和分析。

您经常不在;宏的末尾放置#define这一事实是因为它们被预处理器处理为“简单”文本替换,例如:

#define SOMETHING "abcd";

...
   if (strcmp(thing, SOMETHING) == 0) { ... }
...

将是编译器错误,因为编译器会看到:

   if (strcmp(thing, "abcd";) == 0) { ... }
                       //  ^ invalid here

答案 1 :(得分:0)

using可被视为声明,例如typedef是。

您可以要求编译器输出预处理的结果,例如:使用g++ -C -E,但没有简单的方法要求它输出using

的效果