我的代码在下面,
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安装中为)的头文件,而不将其包含在代码中。