我正在开发一个项目,当前ntohl
,ntohs
,htonl
和htons
被定义为大多数文件包含的标准头文件中的宏。这会在已经定义了这些符号的平台上引起问题,例如,winsock2.h声明具有上述相同名称的函数,并导致编译错误,因为这些声明扩展到我的宏定义。在Mac OS上,我收到了成千上万的编译器警告,因为Mac OS已经为你定义了这些宏。
我想支持Windows,Mac OS和Linux,并尽可能使用标准操作系统功能或宏,如果它们没有被贴上标签,那么请使用我自己的定义。这样做的最佳方式是什么?
我试过了:
#if defined WIN32
#include <winsock2.h>
#endif
但这会导致编译错误,因为当前的大型代码库存在 lot 的函数名冲突。
答案 0 :(得分:1)
这不是一个谜:
#ifndef ntohl
#define ntohl(x) ...
#endif
然后你必须确保所有语言和系统#includes都在你自己之前发生,这无论如何都是标准做法。