当我们看到 #include <iostream>
时,它被认为是一个预处理器指令。#include
---> 指令
而且,我认为:<iostream>
---> 预处理器
但是,“预处理器”和“指令”是什么意思?
最佳答案
思考“指令”和“被给予的指令”(即命令)之间的关系可能会有所帮助。 “预处理器指令”是对预处理器的指示,说明它应该在编译的后期阶段开始之前对代码进行的更改。
但是,预处理器是什么?嗯,它的名字反射(reflect)了它在编译的“主要”阶段之前处理源代码。它只是处理文本源代码,以各种方式修改它。预处理器甚至不理解它所操作的标记——它没有类型或变量、类或函数的概念——它只是用引号和/或括号分组、逗号和/或空格分隔的文本进行处理。这个额外的过程为选择、组合甚至生成程序的部分提供了更大的灵活性。
编辑解决@SWEngineer 的评论:许多人发现将预处理器视为修改 C++ 程序的单独程序会很有帮助,然后将其输出提供给“真正的”C++ 编译器(这几乎是过去的方式)。当预处理器看到 #include <iostream>
时,它会认为“啊哈——这是我理解的,我将处理这个问题,而不是盲目地将它传递给 C++ 编译器”。因此,它会搜索许多目录(一些标准目录,如 /usr/include
以及编译器安装了自己的头文件的任何位置,以及在命令行上使用 -I
指定的其他目录),寻找名为“iostream”的文件。当它找到它时,它会用名为“iostream”的文件的完整内容替换输入程序中的“#include”行,并将结果添加到输出中。但是,它然后移动到它从“iostream”文件读取的第一行,寻找它理解的更多指令。
所以,预处理器非常简单。它可以理解 #include
、 #define
、 #if
/#elif
/#endif
、 #ifdef
和 $ifndef
、 #warning
和 #error
,但不会太多。它不知道“int
”是什么、模板、类或任何“真正的”C++ 东西。它更像是一些自动编辑器,可以剪切和粘贴部分文件和代码,准备 C++ 编译器最终将看到和处理的程序。预处理器仍然非常有用,因为它知道如何在所有这些不同的目录中查找程序的各个部分(编译的下一阶段不需要知道任何相关信息),并且它可以删除可能在其他目录中工作的代码计算机系统,但在使用中无效。它还可以让程序使用简短、简洁的宏语句,生成大量真实的 C++ 代码,使程序更易于管理。
关于c++ - 预处理器指令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4757107/