0

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

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

我努力了:

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

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

4

1 回答 1

1

这几乎不是一个谜:

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

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

于 2013-07-17T10:10:02.370 回答