C++ 位域和-Wconversion

2024-01-08

-Wconversion当我使用 g++ 将值分配给位字段时会产生警告。

源文件:

struct Foo
{
public:
    unsigned int x : 4;
    unsigned int y : 9;
    unsigned int z : 17;
};

int main(int, char**)
{
    int a = 12;
    Foo f;
    f.x = a;
    f.x = (unsigned int)a;
    f.x = (unsigned char)a;
    f.x = (unsigned short)a;
    f.x = (unsigned)a;

    f.y = a;
    f.y = (unsigned int)a;
    f.y = (unsigned char)a; // no warning, sizeof(char) < 9
    f.y = (unsigned short)a;
    f.y = (unsigned)a;

    f.z = a;
    f.z = (unsigned int)a;
    f.z = (unsigned char)a; // no warning, sizeof(char) < 17
    f.z = (unsigned short)a; // no warning, sizeof(char) < 17
    f.z = (unsigned)a;
}

编译输出:

$ g++ --version
g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
<snip>
$ g++ -Wconversion test.cpp
test.cpp: In function ‘int main(int, char**)’:
test.cpp:13:8: warning: conversion to ‘unsigned char:4’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:14:22: warning: conversion to ‘unsigned char:4’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:15:23: warning: conversion to ‘unsigned char:4’ from ‘unsigned char’ may alter its value [-Wconversion]
test.cpp:16:24: warning: conversion to ‘unsigned char:4’ from ‘short unsigned int’ may alter its value [-Wconversion]
test.cpp:17:18: warning: conversion to ‘unsigned char:4’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:19:8: warning: conversion to ‘short unsigned int:9’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:20:22: warning: conversion to ‘short unsigned int:9’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:22:24: warning: conversion to ‘short unsigned int:9’ from ‘short unsigned int’ may alter its value [-Wconversion]
test.cpp:23:18: warning: conversion to ‘short unsigned int:9’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:25:8: warning: conversion to ‘unsigned int:17’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:26:22: warning: conversion to ‘unsigned int:17’ from ‘unsigned int’ may alter its value [-Wconversion]
test.cpp:29:18: warning: conversion to ‘unsigned int:17’ from ‘unsigned int’ may alter its value [-Wconversion]

I want -Wconversion为我的项目的其他部分启用(包括在此文件中)。如何“修复”此处的赋值语句以免收到警告?


确保转换不会溢出。这是一种方法:

struct Foo
{
public:
    unsigned int x : 4; 
    unsigned int y : 9; 
    unsigned int z : 17;
};

int main(int, char**)
{
    int a = 12;
    Foo f;
    f.x = static_cast<unsigned int>(a & 15);    
    f.y = static_cast<unsigned int>(a & 511);   
    f.z = static_cast<unsigned int>(a & 131071);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 位域和-Wconversion 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 为什么 0.1 + 0.1 == 0.2?

    这是关于Java的 据我了解 由于二进制表示形式 Java 无法完美表示 0 1 这使得 0 1 0 1 0 1 0 3 错误的 然而 为什么 0 1 0 1 0 2 给出真实的 由于二进制表示形式 0 1 无法用 Java 完美表示 这使
  • createStackNavigator 不是一个函数

    我正在构建我的第一个练习应用程序 并尝试使用 createApp Navigator 组合屏幕之间的导航 但是 一旦我尝试使用createAppNavigator我收到以下错误 相关代码 App js import React from r
  • 向下滚动时,recyclerview 内的嵌套滚动视图不会触发 onscrolllistener

    Edit 我已经从 Web 服务加载了 200 多个数据集 当我向下滚动 recyclerview 时 它不会触发滚动侦听器 因为 如果我不使用 dy gt 0 条件 它会加载所有接下来的 20 个数据 20 个数据等等 最初是在进行此活动
  • 同一网页内的小程序之间如何共享数据?

    我在同一个网页中有几个小程序 我想在它们之间共享数据 做到这一点的最佳解决方案是什么 EDIT 感谢您的回复 我会尝试更具体 我的网页上有 3 个小程序 第一个将从网络服务器下载文件 第二个将用于本地修改文件 第三个会将修改后的文件发送回服
  • C# 3.0 中的命名/可选参数?

    有没有办法像 C 4 0 一样向 C 3 0 添加可选参数 我一定要拥有这个功能 我已经等不及了 Edit 如果您知道实现此目的的解决方法 技巧 也请发布它 谢谢 您可以使用匿名类型和反射作为命名参数的解决方法 public void Fo
  • 使用 UTF8 格式化 MySQL 命令行

    我有一个包含瑞典 挪威字符串的数据库表 当我查询一些数据时 我得到如下输出 输出与set names latin1 name Kid Interi Bwg Homes If Skadef kring Jangaard Export Nord
  • 尝试在 %AppData% 中执行 .exe 时访问被拒绝

    我正在尝试使用RemoveDrive exe 在这里找到 http www uwe sieber de drivetools e html 在我的 Java 应用程序中 我的 JAR 中有它 我使用以下代码将其提取到临时文件中 但是当我尝试
  • 更改 html5 视频标签的源

    我正在尝试构建一个可以在任何地方使用的视频播放器 到目前为止我会选择
  • 从张量中获取值的随机索引

    我有一个包含一些数值的张量张量 0 0 0 1 1 1 1 2 1 0 1 0 对于每个张量 我想获得零值的随机索引 所以对于第一个张量 可能的输出值为0 1 2对于第二个张量 可能的值为3 5 我只想从这些可能的结果中随机选择一个 所以像
  • 将变量传递给分页库类

    我正在使用 Android 分页库创建一个应用程序 我正在使用它的改造 改造代码位于 ItemDataSource 中 我无法将变量传递给它 我有一些有意的变量 我如何在 Retrofit Post 方法中设置变量 项目数据源 public
  • 如何解决Azure WebJob中无法获取单例锁的问题?

    当我在本地运行应用程序时 我无法获取单例锁问题 我该如何解决 下面是我的代码 static void Main JobHostConfiguration config new enter code here JobHostConfigura
  • SQL:查询包含一组确切用户的组

    如果我有一个简单的用户和组的多对多联接表 例如 CREATE TABLE IF NOT EXISTS users id int 6 unsigned NOT NULL name varchar 16 NOT NULL PRIMARY KEY
  • 使用 C# 在 Excel/VSTO 中的列号到列字母

    如何查找列的名称或标题 例如 如果我在 Excel 中选择第 5 列 则意味着我希望结果为 E 如何获取与列号对应的字母或字母 请帮我解决代码 public static string GetColumnName int columnNum
  • 使用 javascript 在单选按钮列表上调用 onclick

    如何使用 JavaScript 调用单选按钮列表上的 onclick 您如何生成单选按钮列表 如果您只使用 HTML
  • 使用 ThreadPool.QueueUserWorkItem 对线程进行排序

    我是线程基础知识的新手 我有一个要对 XML 文件执行的操作队列 节点添加 节点删除等 1 有 n 个xml文件 并且对于每个文件 使用线程池中的线程分配 ThreadPool QueueUserWorkItem 来执行这些文件操作 我想使
  • 如何通过先浏览将文本文件中的内容或html文件中的html代码加载到文本区域?

    使用 javascript 如何从网页打开文本文件或 html 文件并将文本文件或 html 代码中的内容加载到文本区域 请不要告诉我这不可能使用 javsscript 这是可能的 但我不知道代码 而且我的兄弟一周都没有回家 示例代码将不胜
  • 如何从已处理/捕获的异常中获取堆栈跟踪并将其转储到跟踪日志

    我们使用 Bob Swart 的白皮书作为指南 创建了一个 Datasnap 服务 使用 Delphi XE 它运行良好 我们已将其部署到我们的测试服务器上 现在出现一个问题 当我们执行大量请求 通过 JMeter 时 会发生某种内存损坏
  • 当 Count(*) 结果为 Null 时返回 1 而不是 0

    我的 SQL Server 代码 SELECT ESTAGIO SK ESTAGIO ISNULL count ESTAGIO SK ESTAGIO 0 as how many from ESTAGIO left join ESTAGIAR
  • C# 如何给 jpeg 图像加水印?

    使用 C 如何为正在读入内存流并保存到字节数组的 jpeg 图像添加水印 using MemoryStream imageStream new MemoryStream pbPreview Image Save imageStream Im
  • C++ 位域和-Wconversion

    Wconversion当我使用 g 将值分配给位字段时会产生警告 源文件 struct Foo public unsigned int x 4 unsigned int y 9 unsigned int z 17 int main int