我需要定义一个预处理器宏交换(t,x,y),它将在C / C ++中交换给定类型t的两个参数x和y。任何人都可以对我怎么做?
答案 0 :(得分:2)
如果要交换基本类型(如int或char(实现XOR运算符)),可以使用tripple XOR技巧交换值而无需其他变量:
#define SWAP(a, b) \
{ \
(a) ^= (b); \
(b) ^= (a); \
(a) ^= (b); \
}
如果要交换复杂类型(float,structs,...),则需要一个辅助变量:
#define SWAP_TYPE(type, a, b) \
{ \
type __swap_temp; \
__swap_temp = (b); \
(b) = (a); \
(a) = __swap_temp; \
}
这两个宏的用法是这样的:
int a = 6;
int b = 123;
float fa = 3.1415;
float fb = 2.7182;
SWAP(a, b);
SWAP_TYPE(float, fa, fb);