**C在Linux中的执行过程
.c→.s→.o→.out
预处理 编译 汇编 链接**
预处理阶段
hello.c→hello.i
gcc -o hello.i hello.c -E
进行宏替换(宏的本质是发生在预处理阶段单纯的字符串替换)
#define R 10
预处理时只是将.c文件中的R替换为字符串“10”。
1)宏函数
#define R 20
# define N(n) n*10
//在main函数中
int b=N(R);
//b=200
#define ADD(a,b) a+b
int c=ADD(a,b);
//宏函数可以求出a+b的值;
注意:
#define ADD(a,b) a+b
int e=ADD(a,b)*ADD(a,b);//在预处理阶段ADD(a,b)被替换为字符串a+b
#define ADD(a,b) (a+b) //这样的宏定义才能计算出正确答案
使用宏定义函数时对参数类型不作要求
a,b可以为int,也可以为float,这是比定义一个普通函数的一个优势。
类似的typedef int zhengxing;//在预处理阶段不会被替换
2)条件编译