预处理和宏
预处理
编译过程可以细分为很多子步骤,预处理是编译之前的一个步骤,预处理是处理预处理指令的,预处理指令使以#
开头的语句,像include
、define
、if
等。每个预处理指令占一行,而且只能占一行。
preprocessing instruction (define, undef, include, if, ifdef, ifndef, else, elif, endif, line, error, pragma)
main.cpp
中的#include "mul.hpp"
含义:包含了一个头文件mul.cpp
,这个头文件是人写的代码,经过预处理之后,经过转换,预处理指令语句变为了mul
函数的声明,头文件的内容被嵌入到了相应位置,然后将转换后的代码送到编译器中去编译Compile
。
:::info
编译器处理的不是include
指令,而是处理的经由预处理转换后的内容。
:::
所以当预处理指令出了问题,虽然这个跟编译是无关的,但也会引起编译错误。
宏
宏是由define
指令定义的,在上图中,定义了一个宏PI=3.14
,PI是一个宏,不是一个变量,务必注意。
3.14是双精度double类型的数值,这个值和PI形成了替换关系。
定义了PI,我们可以像使用变量一样去使用,但是经过预处理之后,PI就会被替换成3.14,然后送入编译器进行编译。
宏:可以理解为文字替换,通过源代码的全文搜索,全文替换的作用使一样的。
如果不想每次都写个3.14,定义个宏PI,每次写宏PI,这样就很方便