宏函数知识点:
宏函数是一种只进行简单替换的函数,在预处理时进行函数的替换。
编译分为四步:预处理,编译,汇编,链接
宏函数定义格式为: #define 宏函数名(参数名) 函数
宏函数优点:节省内存(没有形参,不需要占内存)
执行效率高(替换效率高,避免通过函数地址找到函数和传参)
宏函数缺点:不够安全(没有语法检查)
编译时间长 (需要很长的时间进行函数替换)
1. #define 宏常量名 宏常量
比如: #define A 10
那么在预处理时,所有的A将会用10来替换。
2. #define 宏函数名(参数) 函数
比如: #define a(x) x+1
那么同样在预处理时,程序里所有的a(x)将会用x+1来替换
3.值得注意的是:宏函数是直接进行替换,所以没有运算符的优先级,所以能写括号的要把括号都写上。
比如 # define a(x) x*x+1
当程序中使用宏函数时:a(10+10)
理论上应该等于 401
但实际运行时 结果为 10 + 10 *10 +10 +1 = 121
所以在定义的时候要写成 # define a(x) (x)*(x)+1,这样就不会出错了。
参考程序如下:
#include <stdio.h># define A 1 //宏定义
# define a(para) para*para + 1
# define a_m(para) (para)*(para) + 1
# define b(para1 , para2) para1 *para2 + 1
int main()
{
printf("%d\n",A);
printf("%d\n", a(100 ));
printf("%d\n", a(10 + 10 ));
printf("%d\n", a_m(10 + 10 ));
printf("%d\n", b(10 , 10 ));
return 0;
}