#define PRINT(int) printf("%d/n", int)
main()
{
int x, y, z;
x = 2; y = 1; z = 0;
x = x && y || z; PRINT(x);
PRINT(x || !y && z);
x = y = 1;
z = x++ - 1; PRINT(x); PRINT(z);
z += - x ++ + ++y; PRINT(x); PRINT(z);
z = x / ++ x; PRINT(z);
}对于x = x && y || z;x || !y && z;z = x++ - 1;z += - x ++ + ++y;以上这些只要考虑到操作符的优化级和关联规则,还有以前提到过的贪心法(大嘴法)就可以得出结果了。同贪心法的知识,请参考:C语言陷阱与缺陷之词法分析中的“贪心法”。我们重点研究一下z = x / ++x这个语句。(z = (x / (++ x)))如果你还像以前那样按照从内到外的顺序对这个表达式进行求值,即先对x进行递增,然后作为除数、用x作被除数去进行除法计算。问题是:作为被除数的x到底是几?是3还是4?换个问法,被除数到底是递增前的x值,还是递增后的x值?请注意,C语言并没有对这种“副作用”作出
...
继续阅读
(48)