最近给一个等级考试的C语言培训班上课,学生问起一些++的问题。让我好生为难。由于这些不一样的编译器处理方式,在不一样的系统下表现并不一致。windows
无论你洋洋洒洒论述多么一大篇,在事实面前就一下显得苍白了。虽然这样的代码在工程中是不提倡的,可是考试又不得不面对。ui
例1:rem
a=1;
b=++a+++a+++a;编译器
问,执行完以后,b和a的值是多少?io
首先,上面第二个表达式,在WINDOWS下是没法经过编译的,会报告a+++a这样的表达式 lvalue required as increment operand编译
在Mac下也没法经过编译,报告的错误是: Expression is not assignablerequire
须要修改成:b=++a+(++a)+(++a);gcc
在WINDOWS下,VC6中,包括mingw32-gcc.exe(GCC)中,运算的结果是10,4。gc
可是在Mac中,运算的结果是:9,4。语言
缘由是在windows 下,老是先算++a+(++a),并且是先递增两次a,变成3,而后再算两个3之和为6,而后再算+(++a)的值,加上4,因而获得10.
而mac 下彷佛更符合咱们对C的认知,是先执行2+3+4=9;
例2:
a=1;
b=a+++a+++a++;
执行结果也不一样,windows下结果是3,4;
mac下是6,4;