旧风格的铸造,而使用吨

old-style cast while using htons

本文关键字:风格      更新时间:2023-10-16

我有一段使用htons的代码,在编译期间我得到了这个错误。

error: using old-style-cast [-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 ) );

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

C和POSIX库中的所有内联函数类宏也需要作为extern函数存在。您可以通过将其名称括在括号内而绕过该宏并调用该函数:

mFarEnd.sin_port = (htons)( g_DolCommsUdpPort );

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