20.2 预处理

    前面接触到的“#include”和“#define”都属于编译预处理,C++允许在程序中用预处理指令写一些命令行,均以“#”开头,为同普通的语句进行区分,预处理行尾不加分号,原则上预处理行可以写在程序的任何位置,但推荐(或是习惯写法)写在程序文件的头部。编译器在对文件进行实质性的编译之前,先处理这些预处理行,这也是“预”字的含义。

    注意

    预处理器在编译器之前根据指令更改程序文本。编译器看到的是预处理器修改过的代码文本。

    常用的预处理指令如下所示。

    ❑头文件包含。

    ❑宏。

    ❑条件编译。

    ❑其他,如#pragma等。

    20.2.1 头文件包含

    头文件包含以下两种格式。

    ❑#include<头文件名>。

    ❑#include“头文件名”。

    两者的区别在于预处理器查找头文件的顺序,尖括号形式是用于系统提供的头文件,而引号方式首先在当前目录下查找,因而适用于自定义的头文件。

    预处理器会用包含的头文件插入到源文件中,因为包含嵌套的关系(例如,在某个A.cpp文件中使用了头文件包含#include"B.h",而B.h文件中使用#include"C.h",相当于B.h和C.h都会被插入A.cpp文件中,用以替换两个#include指令),可能有多个头文件插入到源文件中。

    注意

    头文件并不拘泥于h后缀名的形式,只要是文本格式均可包含,比如无后缀文本文件、cpp源文件甚至是txt文件等。