网络/主机字节顺序多个平台的功能

时间:2013-07-17 07:52:06

标签: networking cross-platform endianness

我正在开发一个项目,当前ntohlntohshtonlhtons被定义为大多数文件包含的标准头文件中的宏。这会在已经定义了这些符号的平台上引起问题,例如,winsock2.h声明具有上述相同名称的函数,并导致编译错误,因为这些声明扩展到我的宏定义。在Mac OS上,我收到了成千上万的编译器警告,因为Mac OS已经为你定义了这些宏。

我想支持Windows,Mac OS和Linux,并尽可能使用标准操作系统功能或宏,如果它们没有被贴上标签,那么请使用我自己的定义。这样做的最佳方式是什么?

我试过了:

#if defined WIN32
  #include <winsock2.h>
#endif

但这会导致编译错误,因为当前的大型代码库存在 lot 的函数名冲突。

1 个答案:

答案 0 :(得分:1)

这不是一个谜:

#ifndef ntohl
#define ntohl(x) ...
#endif

然后你必须确保所有语言和系统#includes都在你自己之前发生,这无论如何都是标准做法。