c - 定义预处理器宏 swap(t, x, y)

标签 c macros swap

我需要定义一个预处理器宏 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/

相关文章:

c - 即使有信号,fork/exec 也会离开僵尸进程

c - 使用循环定义的宏

c - 将字符串扩展为关键字

c++ - vector<T>::swap 和临时对象

c - 使用 ruby​​ 内置类时如何调用 ruby​​ 扩展方法

在 C 中转换转义序列

c - 链接列表代码插入到中间,但不理解一行

c - IAR编译器警告: "macro does not create a valid token"

recursion - 在 prolog 中交换二叉树