预处理就是在编译之前所做的事情,所以也叫预编译,主要有宏定义、文件包含处理和条件编译。
宏定义
宏定义指令是指用一个指定的标识符代表一个字符串,可以减少程序中重复书写某些字符串的工作量,使用宏可以达到“一改全改”的代码规范。
宏定义主要分为不带参数的宏定义 和 带参数的宏定义。
//不带参数的宏定义
# define N 10
# define PI 3.14
# define R 2*N*N
//带参数的宏定义
# define S(a,b) a*b //程序中出现的S(a,b)与a*b等价
/**
* 宏定义测试
*/
# include <stdio.h>
# define PI 3.14
# define CIRCLE(R,L,S) L=2*PI*R;S=PI*R*R;
int main() {
float r = 10;
float l,s;
CIRCLE(r, l, s);
printf("圆的周长和面积为:%lf,%lf\n", l, s);
return 0;
}
//正常情况下宏的作用范围从定义开始到文件结束
//使用#undef命令可以提前取消宏定义
# undef N
# undef PI
# undef CIRCLE(R,L,S)
文件包含处理
文件包含处理的说明:
- 一个 #include 命令只能包含一个被包含的文件,如果要包含n个文件,要用n个 #include 指令
- 如果文件1包含文件2,而在文件2中要用到文件3的内容,那么在file1.cpp中对包含文件出现的顺序为 #include
ctype.h 包含测试字符的函数
local.h 包含地区化的函数
math.h 包含数学函数
string.h 包含字符串函数
stdio.h 包含标准输入输出函数
stdlib.h 包含常用的系统函数
time.h 包含时间和日期函数
signal.h 包含信号有关的函数
malloc.h 包含动态内存函数
条件编译
- #ifdef //如果已定义宏
- #ifndef //如果未定义宏
- #if //当比爱哦大师为真时就编译程序段1,否则就编译程序段2
/**
* 测试 #ifdef/#ifndef
*/
# define CHINESE 1
# ifdef CHINESE
# include "chinese.h"
# else
# include "english.h"
# endif
int main() {
//...
return 0;
}
/**
* 测试 #if
*/
# include <stdio.h>
# define LETTER 1
int main() {
char c, str[] = "I love C Language!";
int i = 0;
while ((c=str[i])!='\0') {
i++;
#if LETTER
if (c>='a' && c<='z') {
c = c-32;
}
#else
if (c>='A' && c<='Z') {
c = c+32;
}
#endif
printf("%c", c);
}
printf("\n");
return 0;
}