读书人

max宏定义的另一种版本解决办法

发布时间: 2012-03-24 14:00:46 作者: rapoo

max宏定义的另一种版本
使用宏来实现max的一个版本,其中max的参数都是整数,要求在宏max的定义中这些整型参数只被求值一次。给点建议谢谢

[解决办法]
#define max(a,b) ((a) > (b) ? (a) : (b))

这个语句有很多缺陷,光想想都让人头疼,甚至比在高峰时间到高速公路去开车还让人痛苦。
无论什么时候你写了象这样的宏,你必须记住在写宏体时对每个参数都要加上括号;否则,别人调用你的宏时如果用了表达式就会造成很大的麻烦。但是即使你象这样做了,还会有象下面这样奇怪的事发生:

int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次

个人推荐
inline int max(int a, int b) { return a > b ? a : b; }
或者
template <class T>
inline const T& max(const T& a, const T& b)
{ return a > b ? a : b; }



[解决办法]
#define max(x,y) ({ \
typeof(x) _x = (x);\
typeof(y) _y = (y);\
(void) (&_x == &_y);\
_x > _y ? _x : _y; })
来自:
http://www.chinaunix.net/jh/23/934870.html

[解决办法]
如果真的楼主的问题的答案是引入中间变量的写法,那就是道 "脑筋急转弯 "
正常肯定内联了!

不过
int temp1,temp2;
#define max(p,q) (temp1 = (p), temp2 = (q), temp1 > temp2 ? temp1 : temp2)
这个写法是不对的,int temp1,temp;这句话哪来的?
这个要从宏里扩展出来才行
所以这种宏的用法会相当局限

读书人网 >C语言

热点推荐