C语言 预处理小问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 03:31:17
有一道题,让求其运行结果
#define MIN(x,y)(x)<(y)?(x):(y)
main()
{int i=10,j=15,k;
k=10*MIN(i,j);
printf("%d\n",k);
}
我算的k值为100,可答案是15,请问这是为什么?

k=10*MIN(i,j)
=10*(i)<(j)?(i):(j)
=10*10<15?10:15

100<15不成立,所以k=15

宏只是单纯的代码替换

这个例子里的宏写成
#define MIN(x,y) ((x)<(y)?(x):(y))
就可以正常运作了

你的式子等价于 k=10*(i)<(j)?(i):(j);
然后你在根据运算符的优先级算算,看k到底是多少。