【问题标题】:Post and Pre Increment in C [duplicate]C中的后增量和预增量[重复]
【发布时间】:2012-11-26 07:20:35
【问题描述】:

可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

下面有一段代码,我在理解代码逻辑方面面临一个非常严重的问题。

#include <stdio.h>
#include <stdlib.h>

int main(void )
{
int i = 1 ;
printf("\n%d %d %d %d\n",++i,i++,i++,++i) ;
return 0 ;
}

我在名为 Mandriva 的 Linux 发行版下使用 gcc 编译器。在上面提到的我在 printf 语句中使用了带有变量的 pre 和 post 增量。 我应该得到的输出是 2 2 3 5,但我得到了不同的输出。 请在这段代码中帮助我。

我觉得这段代码很难。

【问题讨论】:

    标签: c


    【解决方案1】:

    这是未定义的行为。 i 的增量之间没有序列点。

    任何结果都是正确的结果(包括正在格式化的硬盘)。

    【讨论】:

    • 正在格式化的硬盘不是此代码的有效结果。仅关于评估顺序未定义。
    • 如果我们使用++ii++,整数真的很重要吗?我以为这是一样的。只有当我们对对象进行后增量或预增量时,它才会有所不同。然后在第一种情况下,它被修改和评估,而在第二种情况下,它被复制然后修改。我错过了什么?
    • K 格里高尔。但是这种未定义的行为是因为编译器的版本还是我们使用的操作系统发行版的版本?我可以依赖的编译器是什么?我们是否有可能改变编译器的行为?
    • @Raj89 不,你不能。它是未定义的,因为标准说它是未定义的。只是不要这样做。
    • 格式化硬盘与结果有什么关系?请清楚地告诉我。
    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 2014-12-09
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2017-04-30
    • 2016-02-02
    相关资源
    最近更新 更多