gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:45:16 31 4
gpt4 key购买 nike

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com