#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
void main()
{ int i=2,j=21,k;
k=10*MIN(i,j);
printf("%d\n",k);
}
#define就是完全替换,所以就是
10*(i)<(j)?(i):(j)
先计算10*i=20,j为21,20<21成立,所以表达式结果为i,i为2,所以k=2
最外面打个括号就正常输出20了
第二行改为#define MIN(x, y) ((x) < (y) ? (x) : (y))
即可
你现在这样写,替换后k会变为10*(i)<(j)?(i):(j);
,即先将i乘10,然后和j比较,因为20小于21,所以返回i,此时i为2
有帮助望采纳~