一、概念
编译预处理指在编译系统对源程序编译之前,首先对程序中某些特殊的命令行进行处理,然后将处理的结果和源程序一起编译生成目标程序。
二、分类
1、文件包含
作用:便于文件共享,增加程序的可维护性
格式1:
#include <文件名>
这种格式规定预编译器在指定的目录中搜索由尖括号括起来的文件名。
格式2:
#include <文件名>
这种格式规定预编译器首先在当前目录中搜索由双引号引起来的文件名。如果该文存在,则把它包含在源文件中。否则,在指定的目录中继续搜索。
常见的被包含文件有两种:
(1)以“.h”结尾的头文件,包括由编译系统提供的系统头文件和程序源文件中自定义的头文件;
(2)不以“.c”结尾的其他文件,一般是程序中需要使用的具有相对独立性的数据文件。
例:
导入以独立文件形式保存的数据
在文件data.txt中保存了一组整数,整数间用逗号隔开
1,2,3
在程序中定义了int类型的数组arr[],data.txt中的值可以通过数组初始化的方式导入:
Int arr[] =
{
#include “data.txt”
}
2、宏定义
宏是一种使用标识符定义单词序列的机制。在定义了一个宏后,就可以使用该标
识符表示所定义的单词序列。
无参宏定义:
#define 标识符 单词序列
注意:宏定义在展开时是将其定义直接插入宏所在的位置,宏定义中的各个单词是独立解释的。在包含两个以上单词的宏定义中需要使用括号将宏定义括起来,以避免在宏展开时产生与原意不符的变化。
#define WIDTH 80 #define HI WIDTH+40 int v = HI * 20; ----->v=880 | #define WIDTH 80 #define HI (WIDTH+40) Int v = HI * 20; ----->v=2400 |
有参宏定义:
#define 标识符(标识符表)单词序列
取消宏定义:
#undef <标识符>
3、条件编译
条件编译控制编译系统根据给定的条件对源文件中的内容有选择地进行的编译,主要用于在程序开发和调试中控制版本,增加和屏蔽临时调试代码以及适应不同的软硬件环境,以增加程序代码的可移植性方面。
#if命令 | #ifdef命令 | #ifndef命令 |
#if 常量表达式 程序段1 [#else 程序段2] #endif | #ifdef 标识符 程序段1 [#else 程序段2] #endif | #if 标识符 程序段1 [#else 程序段2] #endif |