Sim*_*ity 4 c++ c-preprocessor preprocessor-directive
当我们看到时#include <iostream>,它被称为预处理器指令.
#include --->指令
而且,我认为:
<iostream> --->预处理器
但是,"预处理器"和"指令"是什么意思?
#include是预处理程序指令,<iostream>只是除了这个指令之外提供的参数,在这种情况下恰好是文件名.
一些预处理器指令采用参数,有些则不采用,例如
#define FOO 1
#ifdef _NDEBUG
....
#else
....
#endif
#warning Untested code !
Run Code Online (Sandbox Code Playgroud)
共同的特点是它们都是从一开始的#.
在Olden Times中,预处理器是一个单独的工具,它在将源代码传递给编译器前端,执行宏替换和包括头文件等之前预处理源代码.这些天预处理器通常是编译器的组成部分,但它基本上只是做同样的工作.
考虑"指令"与"给定指示"(即订单)之间的关系可能会有所帮助."预处理程序指令"是预编程器在编译后期阶段应该对代码所做的更改的方向.但是,预处理器是什么?好吧,它的名字有点递归:它只是处理文本源代码,以各种方式修改它.这种额外的过程在选择,组合甚至生成部分程序方面提供了更大的灵活性.
EDIT寻址@SWEngineer的评论:想想预处理器是一个修改C++程序的独立程序,然后将其输出提供给"真正的"C++编译器(这与以前的方式非常相似).当预处理器看到"#include"时,它认为"啊哈哈 - 这是我理解的东西,我将照顾它,而不是盲目地将它传递给C++编译器".因此,它会搜索许多目录(某些标准目录,例如/ usr/include以及编译器安装自己的标头的位置,以及在命令行上使用-I指定的其他目录),以查找名为"iostream"的文件.当它找到它时,它会将输入程序中的行替换为"#include",并将该文件的完整内容替换为"iostream",并将结果添加到输出中.但是,它接下来移动到它从"iostream"文件中读取的第一行,寻找它理解的更多指令.
因此,预处理器非常简单.它可以理解#include,#define,#if/#elif /#endif,#warning,但不是很多.它不知道"int"是什么,模板,类或任何"真正的"C++东西.它更像是一些自动编辑器,可以剪切和粘贴部分文件和代码,准备C++编译器最终将看到和处理的程序.预处理器仍然非常有用,因为它知道如何在所有这些不同的目录中找到程序的一部分(编译的下一个阶段不需要知道任何关于它的东西),并且它可以删除可能在其他目录上工作的代码计算机系统但对使用中的系统无效.它还可以允许程序使用简短的宏语句,生成大量真正的C++代码,使程序更易于管理.