我的代码在下面,

namespace A
{
     namespace B
     {
           unsigned int htonl(unsigned int address)
           {
                return 0;
           }
     }
}

现在我知道htonl是Linux中的一个库函数。即使我在名称空间下定义它,它也会产生上述错误。如何在不更改函数签名的情况下修复它?

最佳答案

这里的问题是,至少在Linux中,htonl是一个(有时)扩展到__bswap32的宏,而__attribute__((extension))又是一个相当长的宏(其中包含htonl)。宏不关心名称空间。
如果您真的想要自己的函数,它被称为#ifdef(一般来说,您可能不想称它为其他函数),那么您可以

#ifdef htonl
#undef htonl
#endif

htonl是为了避免定义不是宏的东西。
或者您可以找出生成<arpa/inet.h>(在我的Linux安装中为)的头文件,而不将其包含在代码中。

09-09 23:58