带参数的宏定义 #define MIN(x,y) (x)<(y)?(x) : (y) printf("%d",10*MIN(10,15)); 结果为什么是15?

带参数的宏定义 #define MIN(x,y) (x)&lt;(y)?(x) : (y)printf(&quot;%d&quot;,10*MIN(10,15)); 结果为什么是15?MIN(10,15) 出来的结果不是10嘛? 再乘以10 不是100么?printf(&quot;%d&quot;,MIN(10,15)*10); *10放在后面的话结果怎么又是10呢?
2026年09月27日 11:52
有1个网友回答
网友(1):

宏定义的作用只是在编译的时候进行简单的字符串替换,而不会考虑具体代码的逻辑运算。
所以编译编译的时候是直接把10*MIN(10,15)换成了10* (10)<(15)?(10) : (15)
此时先算左边的乘法10*10=100,再来判断100<15是真还是假,结果是假,所以最终整个式子的值是15.
10放在后面就是(10)<(15)?(10) : (15)*10,结果就是10.

要想得到结果是100,宏定义应该写成#define MIN(x,y) ((x)<(y)?(x) : (y))