【问题标题】:Network/Host Byte Order Functions for multiple platforms多平台的网络/主机字节顺序函数
【发布时间】:2013-07-17 07:52:06
【问题描述】:

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

我想支持 Windows、Mac OS 和 Linux,并尽可能使用标准的 OS 函数或宏,如果它们没有贴花,则使用我自己的定义。最好的方法是什么?

我试过了:

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

但这会导致编译错误,因为有 很多 函数名与我当前的大型代码库发生冲突。

【问题讨论】:

    标签: networking cross-platform endianness


    【解决方案1】:

    这并不神秘:

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

    那么您只需要确保所有语言和系统#includes 出现在您自己的之前,这无论如何都是标准做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2015-06-28
      • 2022-01-22
      • 1970-01-01
      • 2014-05-18
      • 2023-03-11
      相关资源
      最近更新 更多