C 定义预处理器宏交换(t、x、y)

C 定义预处理器宏交换(t、x、y),c,macros,swap,C,Macros,Swap,我需要定义一个预处理器宏swapt,x,y将在C/C++中交换给定类型t的两个参数x和y。有人对如何进行交换有任何意见吗?如果您想交换实现XOR运算符的基本类型,如int或char,则可以使用tripple XOR技巧交换值,而无需附加变量: #define SWAP(a, b) \ { \ (a) ^= (b); \ (b) ^= (a); \ (a) ^= (b); \ } #define SWAP_TYPE(type, a,

我需要定义一个预处理器宏swapt,x,y将在C/C++中交换给定类型t的两个参数x和y。有人对如何进行交换有任何意见吗?

如果您想交换实现XOR运算符的基本类型,如int或char,则可以使用tripple 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; \
    }
如果您要交换复杂类型float、structs。。。您需要一个助手变量:

#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++中有宏,为什么需要使用宏::SWD:使用定义交换T、x、y do{ttMP= x;x= y;y= tMP;} 0省略终止分号,使其看起来像函数调用。我想符合这一点,您所指定的类型意味着任何这些int、浮点、字符、…等