c语言中的#define问题.

帮我看看下面这个程序,我就是不知道#define的问题:
#define M(x,y,z) x*y+z
main()
{
int a=1,b=2,c=3;
printf("%d\n",M(a+b,b+c,c+d));
}
上面那段程序的运行结果是什么啊?什么算的啊?
不好意思,c+d中的”d”改成”a”.

#define M(x,y,z) x*y+z 展开此宏时不能自行加括号,直接原形展开即可

由int a=1,b=2,c=3;

得M(a+b,b+c,c+a)=a+b*b+c+c+d=1+2*2+3+3+1=12
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-09-13
展开后为:

a + b * b + c + c + a



1 + 2 * 2 + 3 + 3 + 1 = 12
第2个回答  2006-09-13
程序错误
c+d的d没定义
第3个回答  2006-09-13
19
第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中的大数。
相似回答