在编码完成之后,编译之前,还存在一个阶段,称之为预处理 。所谓的预处理,其实是相对于下一个阶段“编译”而言的,在编译之前,预先处理一下源代码,既有点像是编码,又有点像是编译,是一个中间阶段。

预处理是 C/C++ 程序独有的阶段,其他编程语言都没有,这也算是 C/C++ 语言的一个特色了。

在这个阶段,发挥作用的是预处理器(Pre-processor)。它的输入是编码阶段产生的源码文件,输出是经过“预处理”的源码文件。“预处理”的目的是文字替换,用到的就是我们熟悉的各种预处理指令,比如 #include、#define、#if 等,实现“预处理编程”。

#                              // 预处理空行
#if __linux__                  // 预处理检查宏是否存在
#   define HAS_LINUX    1      // 宏定义,有缩进
#endif                         // 预处理条件语句结束
#                              // 预处理空行

不编译,只输出预处理之后的源码 g++ test03.cpp -E -o a.cxx

预处理指令

查看编译器预定义的系统底层信息

# g++
g++ -E -dM - < /dev/null