15974432466 发表于 2022-11-14 13:08:13

求助大佬帮忙看看,新人刚学

本帖最后由 15974432466 于 2022-11-14 13:09 编辑

#include <stdio.h>

int main() {
        int num = 9;
        printf("%d", (++num) + (num++) * (num--));
        return 0;
}
这个程序输出是120,但是不应该是110吗?++num为10,并且将num赋为10,num++和num++为10,10+10*10=110
很不懂求助,感谢大佬

jackz007 发表于 2022-11-14 13:12:49

本帖最后由 jackz007 于 2022-11-14 13:16 编辑

      此题涉及非确定性行为,结果会因编译器的不同而有所不同,因而,没有讨论价值
      【tdm-gcc 5.1.0】:
D:\\C>g++ -o x x.c

D:\\C>x
120
D:\\C>
         tdm-gcc 5.1.0 编译版本程序的运行结果是 120
      【VC9.0】:
D:\\C>cl x.c
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 15.00.30729.01 版
版权所有(C) Microsoft Corporation。保留所有权利。

x.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.All rights reserved.

/out:x.exe
x.obj

D:\\C>x
110
D:\\C>
          VC9.0 编译版本程序的运行结果是 110
          所以,根本没有必要讨论。

15974432466 发表于 2022-11-14 13:17:55

jackz007 发表于 2022-11-14 13:12
此题涉及非确定性行为,结果会因编译器的不同而有所不同,因而,没有讨论价值
      【tdm-gcc...

谢谢大佬,感谢解疑
页: [1]
查看完整版本: 求助大佬帮忙看看,新人刚学