我有一段代码使用了 htons
,但在编译过程中遇到了这个错误。
error: use of 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
也很诱人,但这是非法的(未定义行为)。例如,实现可能在内部使用宏在一些完全不相关的宏中生成常量。
关于c++ - 使用 htons 时的旧式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24629788/