C语言 预处理
C 语言允许预处理指令,并且会在编译之前对他们进行转换和处理。
一、define
1.不带参数的宏定义
1 |
|
它的作用是,将程序中出现的标识符都用字符串替代。
例如:
1
#define PI (3.14)
这样便可以在代码中用 PI 代表 3.14 ,且代码中所有的 PI 都可以通过修改宏定义很方便地统一修改。
2.带参数的宏定义
1 |
|
它的作用是,将程序中出现的**宏名(参数表)**用字符串替换,并把程序中出现的参数填入对应位置。
3.注意事项
在使用 #define 时,最好给每一个数字加上括号,可以防止出错,避免很多麻烦。因为符号变量会被粗暴地直接替换。
例如:
1
2
3
#define add(x, y) x + y
num = add(x, y) * 3;预想结果:
1
num = (x + y) * 3;
实际结果:
1
num = x + y * 3;
所以更好的做法是:给每一个位置和整体都加上括号
1 |
|
二、include
1.include 的使用
1 |
|
2.“ ” 和 < >
< > 会要求编译器直接去指定目录寻找文件。
“ ” 会要求编译器首先在当前目录查找为了见,如果没有,再到编译器指定目录寻找。
3.注意事项
- include 是一个编译预处理指令,会在编译之前处理
- include 指令实际上是将文件中的内容复制过来
- 使用库函数时,需要先 include 相应头文件
三、条件编译
1.
1 |
|
它的作用是:若指定的标识符已经被定义过,则编译程序段1,否则编译程序段2。
2.
1 |
|
它的作用是:若指定的标识符未被定义过,则编译程序段1,否则编译程序段2。
3.
1 |
|
它的作用是:当指定条件为真时,就编译程序段1,否则编译程序段2。
参考
- C程序设计
- C Primer Plus
- C 语言教程 | 菜鸟教程