我需要定义一个预处理器宏swap(t,x,y),它将在C / C ++中交换给定类型t的两个参数x和y。任何人都对我该怎么办?

最佳答案

如果要交换基本类型,例如int或char(实现XOR运算符),则可以使用三倍XOR技巧来交换值,而无需其他变量:

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


如果要交换复杂类型(浮点,结构等),则需要一个辅助变量:

#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);

关于c - 定义预处理程序宏swap(t,x,y),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26562491/

10-11 22:49