我有一段使用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
也很有吸引力,但这是非法的(未定义的行为)。例如,该实现可以在内部使用宏在一些完全不相关的宏中生成常量。