http://bbs.csdn.net/topics/330252958
目前了解到的有SWAP(val1, val2)三种,各有优缺点
#define SWAP(x, y) \do \
{ \
(x) = (x) ^ (y) \
(y) = (x) ^ (y); \
(x) = (x) ^ (y); \
} while (0)
#define SWAP(a, b) \
do \
{ \
typeof(a) tmp; \
tmp = (a); \
(a) = (b); \
(b) = tmp; \
} while (0)
#define SWAP(m, n) \
do \
{ \
(x) = (x) - (y)\
(y) = (x) - (y)\
(x) = (x) + (y)\
} while (0)
第一种:优点有,不用担心数据交换过程中出现溢出
缺点有,不能实现float型数据的交换(无法处理含小数点数据)
第二种:优点是,相对第一种而言,他可以进行更多类型的数据交换
缺点是,有少数编译器不支持typeof 关键字的用法
第三种:优点是,相对第二种而言,他不收编译器的限制,可以进行多种类型数据交换
缺点是,在想x + y或x - y 过程中可能会溢出