宏是在预编译的时候就进行替换
1.不带参数的宏
#define pi 3.14
则在预编译时如果代码中出现了pi就用3.14进行替换。
宏定义的好处:只要修改宏定义,在进行预编译时,代码中所有的都会进行替换,便于我们进行参数的修改。
宏定义的作用范围是到本文件的末尾(或者定义到.h的头文件中,用的时候包含这个头文件即可)
2.带参宏
#define S(a,b) a*b
注意带参宏的参数没有类型名。
例:
#define S(a,b) a*b
int main ()
{
int multi;
int num;
multi=S(2,4); //预编译时这里会被替换为multi=2*4;
num=S(2+3,4);//预编译时这里会被替换为num=(2+3)*4;
return 0;
}
3.带参宏和带参函数的区别
带参宏被调用多少次就会展开多少次,执行代码的时候没有函数调用的过程,不需要压栈弹栈。
所以带参宏,是浪费了空间,因为被展开多次,节省时间。
带参函数,代码只有一份,存在代码段,调用的时候去代码段取指令,调用的时候要,压栈弹栈。
有个调用的过程。
所以说,带参函数是浪费了时间,节省了空间。带参函数的形参是有类型的,带参宏的形参没有类型名。