C--宏定义
宏定义
宏定义在C语言中为#define symbol xxx,其目的是在编译的预处理阶段将相关符号做文本上的替换,应用包括:
- 数据、字符串的简单替换
#include <stdio.h>
#define PI 3.14
int main(){
printf("PI = %f\n", PI);
return 0;
}
#include <stdio.h>
#define SQ(x) ((x)*(x))
int main(){
float b = SQ(3.14);
printf("PI的平方为 = %f\n", b);
return 0;
}
和函数的区别
二者作用都是相同的,不同之处在于,宏定义是在预处理阶段处理,而函数是编译器在编译阶段将其用作可执行程序放在内存中的某个位置,当调用该函数时,则跳转到该位置。二者的使用各有优缺点。宏定义是以空间换时间,通过文本替换避免了函数跳转导致的多次访问内存从而引起的效率下降。而函数是以时间换空间,宏定义的文本替换可能会导致程序代码量庞大,而函数无论重用多少次,占用的空间都是确定的。同时,因为宏定义无法确定返回类型,所以也存在一定安全性的问题。
使用宏定义可能导致的优先级问题
宏定义的文本不当可能会催生一些优先级方面的问题,比如...
#define X 2
#define Y X*(X+1)
...
printf("Y=%d\n",Y);
答案是5不是6,因为Y展开为2*2+1而不是2*(2+1),这点一定要注意,是个坑。