#define M(x,y,z) xy+xz
main()
{int a=1,b=2,c=3;
printf("%d\n",M(a+b,++b+c,c+a));
}
define 不是函数,它会在编译阶段就直接做字符串替换
所以代码等价于
a+b*++b+c+a+b*c+a
注意,没有括号
-=-=-=
这里++b优先级最高,会在整个表达式计算之前先执行,所以b=3
1+3*3+3+1+3*3+1=24
define 是直接替换
所以结果是这样
#define M(x,y,z) xy+xz
main()
{int a=1,b=2,c=3;
printf("%d\n", a+b++b+c+a+bc+a);
}
我觉得应该是少了乘号
#define M(x,y,z) xy+xz
main()
{int a=1,b=2,c=3;
printf("%d\n", a + b *++b + c+a + b * c + a); //而不是 (a+b)*(++b+c)+(a+b)*(c+a));
}