int a=0;
int b=5;
a=(++b)+(++b)+(++b);
在执行以上c语言语句的时候发现vc的编译器和gcc出现了不同的结果
vs2019编译执行的结果是24,而gcc编译的结果是22
不知道你有没有也遇到过这种情况?
这是编译器处理的结果
1.vs2019编译生成的汇编
在查看汇编之后,发现是vc编译器同时看到了三个(++b),在做完三次++操作后才开始做括号外的加法,所以结果是8+8+8=24
2.gcc编译生成的汇编
gcc只看到了前两个(++b),在做完两次++b后,
就开始做外层的加法,所以结果是7+7+8=22
很多时候,由于现在的编译器帮你做了一些处理,所以结果可能变得和你所预期的结果不一样。