首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出结果是什么?

输出结果是什么?
EN

Stack Overflow用户
提问于 2013-02-01 08:56:40
回答 5查看 107关注 0票数 0

可能重复: What’s the side effect of the following macro in C ? Embedded C

以下内容的输出是什么?

代码语言:javascript
复制
#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)将被调用,输出将是:

代码语言:javascript
复制
11 6 6

但是输出是

代码语言:javascript
复制
11 7 7

有人能解释一下吗。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-01 09:00:49

记住宏是如何工作的。它们完全取代了原来的案文,而不像你所期望的那样评价它们的论证。

代码语言:javascript
复制
k= MAN(i++,++j); 

实际上

代码语言:javascript
复制
k= ((i++) < (++j))?(i++):(++j)

这就是为什么j两次递增的原因。

票数 4
EN

Stack Overflow用户

发布于 2013-02-01 09:01:25

您可以简单地将:x <- i++,y <- ++j放入宏定义中,然后您可以看到

代码语言:javascript
复制
((i++) < (++j))?(i++):(++j)

在进行比较时,i++和++j都被执行;由于比较返回false,因此将执行++j,因此得到了结果。

票数 1
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14642666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档