C语言预处理
- 预处理概述
- 宏定义
- 条件编译
预处理概述
在前面我们已经对C语言的基础语法知识有所了解了,每次进行程序的编写之前,我们会使用#include命令去导入我们的库函数,而这种以#号开头的命令称为预处理命令。
C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。合理地使用预处理功能编写地程序便于阅读、修改、调试、移植,也有利于模块化程序设计。
这个预处理命令时怎样去运行的呢?首先我们要知道的是我们编译器中的文件中的内容。

这里显示了我们用的输出输出函数库,当我们导入这个库函数时,程序会自动的进行预处理,将我们这个stdio.h文件中的内容加载到我们的.c文件中。
宏定义
在C语言程序中允许用一个标识符来表示一个字符串,称为”宏“。被定义为“宏”地标识符称为宏名。在编译预处理时对程序中所有出现的“宏名”,都用宏定义中的字符串去进行文本替换,这称为“宏代换”或“宏展开”。
语法为:
#define 标识符 字符串
这里的字符串可以是常量也可以是表达式。
例如:
#define PI 3.14
// 例举一个函数求面积
int main(){
float r,area;
printf("please input:");
scanf("%f",&r);
area = PI * r*r;
printf("%f",area);
return 0;
}
这里我们使用的PI,但是程序仍能够给出正确的结果,这就是经过了预处理。在CLion的Terminal下输出命令:gcc -E main.c -o main.i,然后再同一个文件夹下找到我们编译好的main.i文件。

用记事本打开翻到最下面,可以发现我们的PI变成了3.14,如下:

条件编译
常用的条件编译指令
| 条件编译指令 | 说明 |
|---|---|
| #if | 如果条件为真,则执行相应操作 |
| #elif | 如果前面条件为假,而该条件为真,则执行相应操作 |
| #else | 如果前面条件均为假,则执行相应操作 |
| #endif | 结束相应的条件编译指令 |
| #ifdef | 如果该宏已经定义,则执行相应操作 |
| #ifndef | 如果该宏没有定义,则执行相应操作 |



















