background image

 

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。