tyf1218405122 发表于 2022-4-20 14:16:46

宏定义以及自增自减运算符

设有下面宏定义:
#define MIN(xy) (x)>(y)?(x):(y)
#define T(x,y,r) x*r*y/4
则执行以下语句后,s1的值为3。s2 的值是28,为什么?
int a=1, b=3, c=5, s1, s2;
s1=MIN (a=b, b-a) ;
s2=T (a++, a*++b, a+b+c);



关于s2中的a++*a+b+c*a*++b/4

按理说应该是3*4+3+5*4*4/4=35,为什么答案是28?

tyf1218405122 发表于 2022-4-20 14:40:27

{:10_266:}

一一不二 发表于 2022-4-20 14:41:33

程序运行不就是3和35吗

一一不二 发表于 2022-4-20 14:47:53

相信自己,答案是错的。

风车呼呼呼 发表于 2022-4-20 14:53:42

因为先算了s1,所以现在的值分别是:a=3、b=3、c=5
s2里面的运算符中自增优先级最高
a++*a+b+c*a*++b/4
等同于
(a++)* a+b+c * a*(++b)/4
= 3 * 3+4+5 * 3 * 4 / 4
=9+4+5*3
=28

风车呼呼呼 发表于 2022-4-20 14:54:59

另外#define MIN(xy),xy中间少了逗号吧
(x)>(y)?(x):(y)求得也是最大值,不应该是MIN而是MAX吧

贾政景 发表于 2022-4-20 20:13:17

s2=T (a++, a*++b, a+b+c);
int a=1, b=3, c=5, s1, s2;
你的宏定义要这样写
#define T(x,y,r)(x)*(r)*(y)/4
页: [1]
查看完整版本: 宏定义以及自增自减运算符