宏名(实参表)
例如:
#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。