++和—操作符对应两条汇编指令。
1)前置:
变量自增(减)1
取变量值
2)后置
取变量值
变量自增(减)1
gcc结果:
vs结果:
vs和gcc不同(灰色地带)
结果分析:vs先加后自增。
为什么结果不确定?
1)C语言中只规定了++和--对应指令的相对执行程序;
2)++和--对应的汇编指令不一定连续运行;
3)在混合运算中,++和--的汇编指令可能被打断执行;
++和--参与混合运算的结果是不确定的。
笔试中的奇葩题:
编译器究竟如何编译?
int j = ++i+++i+++i; //该行出错 1++ 这样不合法
贪心法:++和--的阅读技巧
1)编译器处理的每个符号应该尽可能多的包含字符;
2)编译器从左向右的顺序一个一个尽可能多的读入字符;
3)当读入的字符不可能和已读入的字符组合成合法 符号为止;
注意:
1)空格可以作为C语言中一个完整符号的休止符;
2)编译器读入空格后立即对之前读入的符号进行处理;(尽量使用空格)
小结:
1)++和--操作符在混合运算中的行为可能不同;
2)编译器通过贪心法处理表达式中的子表达式;
3)空格可以作为C语言中一个完整符号的休止符;
4)编译器读入空格后立即对之前读入的符号进行处理;