旧风格的铸造,而使用吨
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
,但这是非法的(未定义的行为)。例如,实现可以在内部使用宏来生成常量,在一些完全不相关的宏中。
相关文章:
- Qt VTK交互风格的信号到小部件
- 我可以使用条件运算符初始化C风格的字符串文字吗
- Visual Studio 2019:插入多个C++风格的单行注释
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 重载运算符<<采用谷歌 C++ 风格
- C++许多 SFINAE 风格的过载
- 谷歌风格指南(前向分枝部分)
- 如何使用 cmake pack redhat 风格的 rpm,这是主要的和"-devel"?
- 如何用符合C++核心准则的代码替换C风格的字符串解析
- 如何编写一个类似于kernellist_head的c++风格的双链表实现
- 用现代C++STL数据结构替换旧的C风格数组
- 如何确保 C/C++ 代码中不会缺少 doxygen 风格的文档注释?
- C++(Visual Studio)有Java风格的注释吗?
- 如何"Re-Polish"相同风格的QApplication?
- 如何按照 Google C++风格指南连接字符串文字?
- 如何为特定的构建风格设置 cpp 文件夹
- 使用 rangesv3 在 c++ 中模拟 python 风格的列表理解?
- 包括C++标题,"..."与<...>风格,ISO / IEC官方意见?
- 为什么一个简单的"Hello World"风格的程序不能用Turbo C++编译?
- 我如何使用MFC C 模仿办公风格