<分区>
Possible Duplicate:
is there an equivalent of std::swap() in c
大家好,
我正在尝试用 C 语言编写通用交换宏,我的宏如下所示:
#define swap(x,y) { x = x + y; y = x - y; x = x - y; }
它适用于整数和 float ,但我不确定它是否有任何问题。如果通用宏指的是交换指针、字符等怎么办?谁能帮我写一个通用宏来交换每个输入?
谢谢
<分区>
Possible Duplicate:
is there an equivalent of std::swap() in c
大家好,
我正在尝试用 C 语言编写通用交换宏,我的宏如下所示:
#define swap(x,y) { x = x + y; y = x - y; x = x - y; }
它适用于整数和 float ,但我不确定它是否有任何问题。如果通用宏指的是交换指针、字符等怎么办?谁能帮我写一个通用宏来交换每个输入?
谢谢
最佳答案
这只适用于整数。
对于 float ,它会失败(例如,尝试用一个非常大的 float 和一个非常小的 float 运行它)。
我建议如下:
#define swap(x,y) do \
{ unsigned char swap_temp[sizeof(x) == sizeof(y) ? (signed)sizeof(x) : -1]; \
memcpy(swap_temp,&y,sizeof(x)); \
memcpy(&y,&x, sizeof(x)); \
memcpy(&x,swap_temp,sizeof(x)); \
} while(0)
当复制的数量在编译时已知时,memcpy 是非常优化的。 此外,无需手动传递类型名称或使用特定于编译器的扩展。
关于c - 在 C 中实现通用交换宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3982348/