【发布时间】:2017-01-28 15:03:57
【问题描述】:
如果我们想使用用户输入在程序中做某事,或者打印我们需要的结果
#include <iostream>
否则,cout 和cin 将不会被编译器确认。但是命令#include 是预处理器命令。当我编写程序时,发生了以下情况。我写了以下代码:
#define PRINT_DEBUG_INFO(a) {cout << “Info: ” << a << endl;}
#include <iostream>
并且没有弹出错误。在包含iostream 之前如何使用cout?即使我声明 PRINT_DEBUG_INFO(a) 而不包括 iostream,我也不会收到编译错误。
谁能解释一下为什么会这样?
【问题讨论】:
-
define不是函数,它只会复制所有代码并替换您使用的任何位置。 -
#include <iostream>,不是#include iostream。 -
在声明之前您没有“使用”
cout。您所做的只是定义一个宏,其中包含文本cout(和endl),稍后可以在代码中使用。 -
想象一下我写了
void func() {int cout, endl; PRINT_DEBUG_INFO("blah");},那么cout丢失就没有问题了(尽管尝试在数字和字符串上使用<<还有另一个问题)。 -
预处理器只是一只猴子,它在编译器看到它之前对你的代码进行 Ctrl-C 和 Ctrl-V,它对编译器错误一无所知。 :)
标签: c++ c-preprocessor