Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用HTON时的旧式强制转换_C++ - Fatal编程技术网

C++ 使用HTON时的旧式强制转换

C++ 使用HTON时的旧式强制转换,c++,C++,我有一段代码使用了htons,在编译过程中出现了这个错误 错误:使用旧样式转换[-Werror=旧样式转换] 电话是: mFarEnd.sin_port = htons( g_DolCommsUdpPort ); 其中g_dolcommsudport定义为: static uint16_t const g_DolCommsUdpPort = 43775; 我尝试了下面的C++程序,但没有成功: mFarEnd.sin_port = static_cast< unsigned shor

我有一段代码使用了
htons
,在编译过程中出现了这个错误

错误:使用旧样式转换[-Werror=旧样式转换]

电话是:

mFarEnd.sin_port = htons( g_DolCommsUdpPort );
其中
g_dolcommsudport
定义为:

static uint16_t const  g_DolCommsUdpPort = 43775;

我尝试了下面的C++程序,但没有成功:

mFarEnd.sin_port = static_cast< unsigned short int >(htons( Bti::Atlas::UDPPorts::g_DolCommsUdpPort ) );
mFarEnd.sin_port=static_cast(htons(Bti::Atlas::UDPPorts::g_dolcomsudport));

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

C和POSIX库中的所有内联函数(如宏)也必须作为
extern
函数存在。您可以通过将宏的名称括在括号中来取消宏并调用函数:

mFarEnd.sin_port = (htons)( g_DolCommsUdpPort );

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

这篇文章不可读。为什么你忽视了直播预览,不加思考就盲目点击“问那个问题”?我修正了,但说真的,有一个预览就在那里,盯着你看。什么是
htons
?试着对源代码进行预处理,我打赌该强制转换在宏中。