我有一段使用htons的代码,在编译期间出现此错误。



该行是:

mFarEnd.sin_port = htons( g_DolCommsUdpPort );

其中g_DolCommsUdpPort定义为:
static uint16_t const  g_DolCommsUdpPort = 43775;

我尝试了以下C++转换,但未成功:
mFarEnd.sin_port = static_cast< unsigned short int >(htons( Bti::Atlas::UDPPorts::g_DolCommsUdpPort ) );

最佳答案

我敢打赌,htons是一个扩展为具有强制转换和移位的表达式的宏。与内联函数相反,宏的好处在于它可以在常量表达式中工作。 (C++ 11在常量中启用合适的内联函数。)

还要求C和POSIX库中的所有类似于内联函数的宏都必须作为extern函数存在。您可以取消宏并调用函数,而无需括号其名称:

mFarEnd.sin_port = (htons)( g_DolCommsUdpPort );

#undef htons也很有吸引力,但这是非法的(未定义的行为)。例如,该实现可以在内部使用宏在一些完全不相关的宏中生成常量。

10-07 12:05