background image

  宏名(实参表)

  例如:

  #define M(y) y*y+3*y

  ....

  k=M(5);

  ....

  在宏调用时,用实参 5 去代替形参 y,经预处理宏展开后的语句为:

  k=5*5+3*5

    举一个具体例子:

#define MAX(a,b) (a>b)?a:b

#include <stdio.h>

int main()
{
 int x,y,max;
 printf("input two numbers: ");
 scanf("%d%d",&x,&y);
 max = MAX(x,y);
 printf("max=%d\n",max);
 return 0;

}

    上例程序的第一行进行带参数宏定义,用宏名 MAX 表示条件表达式(a>b)?a:b,形参
a,b 均出现在条件表达式中。程序第七行 max = MAX(x, y)为宏调用,实参 x,y,将代换形参
a,b

 

。宏展开后该语句为: max = (x>y)?x:y;用于计算 x,y 中的大数。

    对于带参的宏定义有以下问题需要说明:

    1. 带参宏定义中,宏名和形参表之间不能有空格出现。

    

 

例如把: #define MAX(a,b) (a>b)?a:b

 

写为: #define MAX (a,b) (a>b)?a:b 将被认为是无

参宏定义,宏名 MAX

 

代表字符串 (a,b)(a>b)?a:b。