第4个回答 2020-06-08
带参宏定义
c语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
带参宏定义的一般形式为:
#define
宏名(形参表)
字符串
在字符串中含有各个形参。
带参宏调用的一般形式为:
宏名(形参表)
例如:
#define
M(y)
((y)*(y)+3*(y)
/*宏定义*/
....
k=M(5);
/*宏调用*/
....
在宏调用时,用实参5去代替形参y,经预处理宏展开后的语句为:
k=5*5+3*5
程序2:
#define
MAX(a,b)
(a>b)?a:b
main(){
int
x,y,max;
printf("input
two
numbers:
");
scanf("%d%d",&x,&y);
max=MAX(x,y);
printf("max=%d\n",max);
}
上例程序的第一行进行带参宏定义,用宏名MAX表示条件表达式(a>b)?a:b,形参a,b均出现在条件表达式中。程序第七行max=MAX(x,y)为宏调用,实参x,y,将代换形参a,b。宏展开后该语句为:
max=(x>y)?x:y;
用于计算x,y中的大数。