可能重复: What’s the side effect of the following macro in C ? Embedded C
以下内容的输出是什么?
#include <stdio.h>
#define MAN(x,y) ((x) < (y))?(x):(y)
main()
{
int i=10,j=5,k=0;
k= MAN(i++,++j);
printf("%d %d %d" ,i,j,k);
}在这里,我想人类(10,6)将被调用,输出将是:
11 6 6但是输出是
11 7 7有人能解释一下吗。
发布于 2013-02-01 09:00:49
记住宏是如何工作的。它们完全取代了原来的案文,而不像你所期望的那样评价它们的论证。
k= MAN(i++,++j); 实际上
k= ((i++) < (++j))?(i++):(++j)这就是为什么j两次递增的原因。
发布于 2013-02-01 09:01:25
您可以简单地将:x <- i++,y <- ++j放入宏定义中,然后您可以看到
((i++) < (++j))?(i++):(++j)在进行比较时,i++和++j都被执行;由于比较返回false,因此将执行++j,因此得到了结果。
发布于 2013-02-01 09:01:57
它变成
i++ < ++j?i++:++j
我不会小于j,所以我们使用第二个参数
所以我们做了一个i++和++j还有另一个++j
因此,10 +1=11.5+1+1=7并返回第二个参数……7
11 7 7
https://stackoverflow.com/questions/14642666
复制相似问题