1.2 带参宏指令
程序有一些表达式,采用函数形式,更容易理解和记忆,例如,生成100 以内的随
机数,rand()%100 不如 random(100),a 和 b 求大者,a>b?a:b 不如 max(a,b),可
是函数的调用开销大,即使内联函数,也会占用更多的栈空间。带参宏指令是另一种可选
方案,它的定义格式为:
#define
宏名(形参表) 宏体
例如:
#define random(num) rand()%(num)
宏体中包含 num 的括号是非常重要的,宏展开与函数调用不同,不是用实参给形参
赋值,而是用实参简单地替换形参,如果没有括号,如:
#define random(num) rand()%num //宏体中 num 无括号
那么 a=random(2+8)被预处理之后成为 a= rand()%2+8,这与要求不符。
见图 7.2。
图 1.2 “
函数 /
编译预处理 /
”
带参宏指令
‘
宏体可以占用多行,但换行需要加 \’。甚至整个函数或程序都可以做宏体,简化为一
条命令。见图 1.3。