Answers
http://www.cnblogs.com/safeking/archive/2008/03/21/1116302.html
去掉副作用的最小宏定义方式(linux kernel定义)
159: #define min_t(type,x,y) \
160: ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
阿媽系女人
answered 9 years, 2 months ago
首先,你要明白,define就是进行简单的替换,这是第一点,基于此,我们就将你提供的两个表达式使用宏来进行替换,然后你就会明白了。
((a) > (b) ? (a) : (b)) => ((++a) > (b) ? (++a) : (b))
((a) > (b) ? (a) : (b)) => ((++a) > (b+10) ? (++a) : (b+10))
你再把值填进去计算,你就应该明白了。
先判断a是否大于b,此时会进行一次++运算操作;当a大于b时,会返回++a表达式,会再次进行一次++操作;我说的比较绕,我想你应该懂我的意思。
解决方案就是,不要在宏中使用会改变自己值的运算符,比如++,--等,这样会让你很晕的。
bisrot
answered 9 years, 2 months ago