|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- int main()
- {
- int a;
- int b;
- int c;
- int d;
-
- a = 5;
- b = 5;
-
- c=(a++)+(a++)+(a++);
- d=(++b)+(++b)+(++b);
-
- printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
- }
复制代码
如上代码,d为啥等于22呢?连续3个++b不应该是6,7,8么,怎么不是21呢?
本帖最后由 jackz007 于 2020-12-15 11:06 编辑
不要纠结于这样极端的例子,不同的编译器会得到不同的结果
VC 16.8.2
- D:\00.Excise\C>cl x.c
- 用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.28.29334 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- x.c
- Microsoft (R) Incremental Linker Version 14.28.29334.0
- Copyright (C) Microsoft Corporation. All rights reserved.
- /out:x.exe
- x.obj
- D:\00.Excise\C>x
- a=5,b=5,c=0,d=0
- a=8,b=8,c=15,d=24
- D:\00.Excise\C>
复制代码
gcc 9.2
- D:\00.Excise\C>g++ -o x x.c
- D:\00.Excise\C>x
- a=5,b=5,c=0,d=0
- a=8,b=8,c=18,d=22
- D:\00.Excise\C>
复制代码
所以,这根本就不是知识点,你的纠结和烦恼毫无价值,忘记它吧!
这也提示我们,为了避免出现这样的不确定性,一定要坚决禁止这样写代码!
|
|