我有一段使用htons
的代码,我在编译时遇到了这个错误。
错误:使用旧式强制转换[-Werror = old-style-cast]
该行是:
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 ) );
答案 0 :(得分:3)
我的赌注是htons
是一个扩展为具有强制转换和移位的表达式的宏。与内联函数相反,宏的好处在于它以常量表达式工作。 (C ++ 11在常量中启用合适的内联函数。)
C和POSIX库中的所有类似内联函数的宏也需要作为extern
函数存在。你可以打败宏并通过括号括起来调用函数:
mFarEnd.sin_port = (htons)( g_DolCommsUdpPort );
它也很诱人#undef htons
,但这是非法的(未定义的行为)。例如,实现可以在内部使用宏来生成一个常量,在一些完全不相关的宏中。