C语言的一个形似函数的宏的陷阱
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