C提供的三种预处理功能:宏定义 文件包含 条件编译
.................................................................................................................................................................................................
宏定义: #define 标识符 字符串
eg. #define PI 3.14
宏的概念的关键是“换”,如上,就是将程序中所有的PI替换成3.14.
宏还可以定义函数:
eg. #define MAX(a,b) ((a) > (b) ? (a) : (b)) // 那么在程序中只要碰到MAX(a,b)就是直接返回两者的最大值。不用再写求最值的函数。
eg. #define PRINTIF(n) { while(n) { printf("%d\t",n); (n) = (n) - 1; } } //若是多条语句则多条语句要用{ }括起来
eg. #define PRINTSTR(str) printf("%s\n",str);
............................................................................................................................................................................................
文件包含:#include “ xxx.h ” 或#include< xxx.h >
本地头文件用#include “ ” ,函数库头文件两种都可以,如#include< stdio.h > #include"stdio.h"。
.............................................................................................................................................................................................
条件编译:
形式一: //根据不同的宏定义来条件选择编译
#if 表达式1 //理解为如果满足表达式1 则执行程序段一,如果满足表达式2则执行程序段2
程序段1
#elif 表达式2
程序段2
#endif
形式二: //用于头文件中的内容,避免重复声明和定义。
#ifndef <标识> //标识的命名规则一般是头文件名全大写,前面加下划线,并把文件名中的“.”也变成下划线
#define <标识>
..........
#endif
<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前面加下划线,并把文件名中的“.”也变成下划线,如:a.h _A_H
#ifndef A_H意思是"if not define a.h" 如果不存在a.h
#define A_H 就引入a.h
#endif 否则不需要引入