求C语言高手来?

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:52:29
#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+a));
}
答案 12 可是我怎么算 也是19 呀 为什么呀 这个程序怎样运行的呀?

M(a+b,b+c, c+a)展开之后是

a + b * b + c + c + a 算算看结果是多少吧

找找教材里讲#define的那一节好好几遍吧

宏定义不会跟你加括号的
a+b*b+c+c+a=1+4+3+3+1=12.

printf("%d\n", M(a+b,b+c, c+a));//进行宏替换后是
printf("%d\n", a+b*b+c+c+a);//也就是
printf("%d\n", 1+2*2+3+3+1);
就是12了啊

#define M(x,y,z) x*y+z
这段程序前定义了一个宏,下面调用了宏M(a+b,b+c, c+a),
M(a+b,b+c, c+a)就变成了a+b*b+c+c+a=12
宏替换会直接替换为宏中定义的表达式。

#include <stdio.h>
#define M(x,y,z) x*y+z //宏定义,但要是M(a+b,b+c, c+a)这样就如a+b*b+c+c+a,而不是先计算a+b等,看下课本,里面有详细点的
void main()
{
int a=1,b=2, c=3;
printf("%d\n", M(a+b,b+c, c+a));//这样就是12
printf("%d\n", M((a+b),(b+c), (c+a)));//这样就是19
}