30 November 2013
#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main(int argc, char *argv[])
{
    int i = 3, j = 4;
    MAX(++i, j); //After this statement, what is the value of i?
    return 0;
}

如果不够细心,可能会认为++i执行了两次,i=5。
然而,答案可能令人费解,i=4.
为什么呢?请看展开后的形式
((++i) > (j) ? (++i) : (j));
确实是两个++i啊,但是!
第二个++i却没有被执行!! 原因就不多说了。



blog comments powered by Disqus