预处理
1、在C语言中所有以#开头的指令都是预处理指令
2、预处理它本身并不属于C语言的一部分,在程序编译之前,先对程序中这些特殊的命令进行“预处理”,根据预处理命令对程序进行相应的处理,经过处理的程序不再包含预处理命令,此时可对程序进行编译。
3、预处理是在编译之前完成的。
宏定义:
#define 标识符 字符串
#define PI 3.14
int main()
{
double r, s, c, v;
r = 3.6;
s = r*r*PI;
c = 2 * r*PI;
v = 4.0 / 3 * PI*r*r*r;
printf("s=%.2f,c=%.2f,v=%.2f\n", s, c, v, );
return 0;
}
宏展开就是做了一个简单的文本替换工作,不进行增益性检查,宏定义后不必加“;”
宏定义作用域从定义开始到本文件结束,或者到undef结束# undef PI
# define R 5
#define S PI*R*R
对双引号或单引号中的宏不做替换
#define SUM a+3
int main()
{
int a = 8, b;
b = 5 * SUM;
printf("%d\n", b);
return 0;
}
带参宏
#define ADD(a,b) a+b
#define MUL(a,b) a*b//MUL(i+1,j) i+1*j
//完成两个带参数宏,每个参数和每个整体都要括起来
#define MUL(a,b) ((a)*(b))
int main()
{
int i = 4, j = 9, k;
k = ADD(i, j);
k = MUL(i + 1, j);//k=i+1*j
printf("%d\n", k);
return 0;
}
//一定要先换完再做运算
带参宏之间不能有空格即括号和名
宏没有类型定义
#define CALC(a,b,sum,sub) ((sum)=((a)+(b)));((sub)=((a)+(b)))
//可以返回两个值
“文件包含”处理
"“”"和"<>"的区别:查找的位置不一样
//先去当前目录找,找不到再去系统配置路径找,一般自己写用双引号,系统