c++ - 使用 htons 时的旧式转换

标签 c++

我有一段代码使用了 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/

相关文章:

c++ - 在使用 auto 时初始化结构会导致 VS 2013 中的拷贝

c++ - FindResource() 无法找到数据,即使数据在 exe 中

c++ - 我应该使用什么数据结构来为数据库/表建模?

c++ - 使用 boost::program_options 时,如何设置参数的名称?

c++ - 复制省略可见的副作用

c++ - 如何调用删除的 nothrow 版本?

c++ - 猜数字游戏

c++ - 为什么使用第一个 `&` ?

c++ - delete[] 触发断点

c++ - OpenCV 中的 Hessian 仿射检测器