| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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>
 
  复制代码
        所以,这根本就不是知识点,你的纠结和烦恼毫无价值,忘记它吧! 
        这也提示我们,为了避免出现这样的不确定性,一定要坚决禁止这样写代码!  
 
 
 |   
 
 
 
 |