预处理和宏

预处理

编译过程可以细分为很多子步骤,预处理是编译之前的一个步骤,预处理是处理预处理指令的,预处理指令使以# 开头的语句,像includedefineif等。每个预处理指令占一行,而且只能占一行。

preprocessing instruction (define, undef, include, if, ifdef, ifndef, else, elif, endif, line, error, pragma)

image.png
main.cpp中的#include "mul.hpp" 含义:包含了一个头文件mul.cpp,这个头文件是人写的代码,经过预处理之后,经过转换,预处理指令语句变为了mul函数的声明,头文件的内容被嵌入到了相应位置,然后将转换后的代码送到编译器中去编译Compile。 :::info 编译器处理的不是include指令,而是处理的经由预处理转换后的内容。 ::: 所以当预处理指令出了问题,虽然这个跟编译是无关的,但也会引起编译错误。

image.png
宏是由define指令定义的,在上图中,定义了一个宏PI=3.14PI是一个宏,不是一个变量,务必注意。
3.14是双精度double类型的数值,这个值和PI形成了替换关系。

定义了PI,我们可以像使用变量一样去使用,但是经过预处理之后,PI就会被替换成3.14,然后送入编译器进行编译。

宏:可以理解为文字替换,通过源代码的全文搜索,全文替换的作用使一样的。

如果不想每次都写个3.14,定义个宏PI,每次写宏PI,这样就很方便