c - 在 C 中实现通用交换宏

标签 c function macros generics

<分区>

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/

相关文章:

python - 以 Root 身份执行 Python 脚本(seteuid 与 c-wrapper)

c++ - 用宏循环

c++ - 嵌套宏中的 BOOST_PP_SEQ_ELEM 和 BOOST_PP_SEQ_ADD ?

c - 在 Eclipse 中对整个 C 项目运行自动格式化程序

c - 如何将机器代码发送到特定处理器?

python - PyGame - 带阴影的文本

javascript - 在运行时,函数声明被解析和执行

javascript - 如何在一个函数中将值推送到数组并在另一个函数中读取它?

c - 在 C 中是否有任何用于读/写系统调用的标准输入/输出宏?

bind() 套接字可以连接到远程地址吗?