宏定义交换两个变量值的陷阱

来源:互联网 发布:sql 默认值绑定到表中 编辑:程序博客网 时间:2024/04/28 00:52

宏定义交换两个变量,没有中间暂存变量的一种方法如下:

#define swap(a,b) {a ^=b; b ^=a; a ^=b;}

如果a和b是两个不同的变量时,这样写是没有问题的,但是我们在给数组排序时可能会交换数组中两个元素的值,swap(array[i], array[j]), 当i==j 时,就会出现两个变量相同的情况了,这时调用这个宏交换后array[i] = 0 了,可以理解为 swap(array[i], array[i])   array[i] ^= array[i];array[i] ^= array[i];array[i] ^= array[i];这样异或运算的结果就是0了。

0 0