一、不带参数的宏定义
#define 标识符 字符串
如:#define PI 3.1415926
二、带参数的宏定义
#define 宏名(参数表) 字符串
如::#define S(a,b) a*b
总结:
(1)参数表无参数类型;
(2)实参如果是表达式,容易出问题;
所以,如果是带参数的宏定义,则要给宏体中的每个参数加上括号,并在整个宏体上再加一个括号。
如:#define S(r) r*r
area=S(a+b);
第一步换为area=r*r;,第二步被换为area=a+b*a+b;
正确的宏定义是#define S(r) ((r)*(r))
(3)宏名和参数的括号间不能有空格;
函数调用和宏定义的比较:
(1)函数调用在编译后程序运行时进行,并且分配内存;
宏替换在编译前进行,不分配内存;
(2)宏定义方便程序的更改,使用带参数的宏定义可完成函数调用的功能,不但减少系统开销而且提高了运行效率。