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 | 如果该宏没有定义,则执行相应操作 |