GCC 的 -Wmaybe-uninitialized 是否会针对基于枚举的 switch 语句使用 -O1 生成虚假警告?

2023-12-14

我有一段以下形式的代码:

typedef enum {A=1,B} EnumType;

int foo (EnumType x)
{
  int r;
  switch (x) {
    case A:
      r = 1;
      break;
    case B:
      r = 2;
      break;
      /*
    default:
      r = -1;
      break;
      */
  }
  return r;
}

我使用 GCC 6.3.0 进行编译并收到警告:

$ gcc --version
gcc (MacPorts gcc6 6.3.0_2) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc -c -Wall -O1 test.c
test.c: In function 'foo':
test.c:20:10: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized]
   return r;
          ^

该代码对我来说似乎很安全,并且确实有一些讨论GCC 通过此警告产生误报.

这是一个虚假的警告吗?

更多相关信息:

  • 添加注释掉的内容default:阻止解决警告
  • 警告不会出现-O0

这个警告是完全正确的,因为enumtype 不限制在此定义的成员的可能值enum-- 它可以代替any基础整数类型的值。所以没有default在你的交换机中分支,你确实可以使用r未使用您显示的代码进行初始化。

我可以重现缺少的警告gcc and -O0问题中显示了确切的代码,所以在我看来这就像一个错误gcc。无论优化级别如何,都应该发出警告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCC 的 -Wmaybe-uninitialized 是否会针对基于枚举的 switch 语句使用 -O1 生成虚假警告? 的相关文章

  • 地图类容器的专用功能

    我想要专门为矢量和地图之类的容器设计一个函数模板 对于向量 我可以像下面那样做 但我不知道如何才能有一个专门版本的函数 该函数仅用于像地图这样的容器 include
  • 如何配置 Ninject 来注入 NodaTime IClock

    在我的 NinjectConfigurator 中我有 container Bind
  • 字符串/分段错误

    Program to calculate trip and plan flights define TRIP 6 define NAMEMAX 40 define DEST 1 include
  • 如何在 ASP.NET MVC 中处理会话数据

    假设我想存储一个名为language id在会议中 我想我也许可以做如下的事情 public class CountryController Controller WebMethod EnableSession true AcceptVer
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 如何在 Google Mock 中使用可选参数来模拟方法?

    如何使用可选参数模拟方法谷歌模拟 例如 class A public void set enable bool enabled true class MockA public A MOCK METHOD1 set enable void b
  • 有关shared_ptr的竞态条件示例

    为什么没有竞争条件代码片段 https godbolt org z nEYPYqdqK below include
  • 图片框、双击和单击事件

    我有一个奇怪的问题 我有一个图片框双击事件以及单击事件 问题是即使我双击该控件 也会引发单击事件 如果我禁用单击事件 则双击事件正在工作 这个问题已经在这里讨论过 https stackoverflow com questions 1830
  • 如何在单例类和未命名类之间进行选择?

    我会使用这样的单例 Singleton single Singleton instance single gt do it 我会使用这样的未命名类 single do it 我觉得单例模式除了具有可读的错误消息之外 与未命名的类相比没有任何
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • C++:避免​​在重载中将字符串自动转换为布尔值

    我想创建一组方法 这些方法将根据其类型输出具有特殊格式的值 当我这样做时 到目前为止看起来还不错 static void printValue std ostringstream out int value out lt lt value
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • C 编程中的 rand() 问题? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我总是用 rand 得到相同的随机数序列 https stackoverflow com questions 1108780 why do i always get the same seque
  • 大小为 k 的非连续子序列的最大值的最小值

    在开始之前 我希望这个问题不是重复的 我发现了几个类似的问题 但它们似乎都没有描述完全相同的问题 但如果它是重复的 我会很高兴看到一个解决方案 即使它与我的算法不同 我一直在尝试回答这个问题 https stackoverflow com
  • 对象变空似乎是 Hangfire 中的反序列化问题

    Hangfire 似乎无法反序列化我的原始版本Scheduler对象及其所有状态 我正在调用其 Execute 方法BackgroundJob Enqueue 如下所示 Scheduler new FileInFileOut FileIn
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • 获取线段上最接近另一个点的点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想找到线段AB上最接近另一个点P的点 我的想法是 Get a1 and b1由直线公式y1 a1x b1 使用 A 点

随机推荐

  • 检查字符串数组中的整数

    我正在尝试检查字符串数组是否存在转换后的整数 这位于一个过程中 其中 nc ecosite is an integer多变的 current consite是一个字符串数组 ecosite is an integer current eco
  • 如何用java模拟真实的鼠标点击?

    我正在尝试在 Java 中执行鼠标单击 以单击外部程序中的某些内容 为此 我正在使用java awt robot 以及以下代码 Robot bot new Robot int mask InputEvent MOUSE BUTTON1 DO
  • Delphi Android - 检测设备方向变化

    Delphi Android 开发新手 如何检测屏幕方向已更改 即从肖像到风景 反之亦然 发生这种情况时如何触发代码 例如 我有一个图像尺寸为 300x200 在纵向模式下 但当设备切换到横向时 我希望它调整并占据全屏宽度 在你的表单中实现
  • 如何降低 RealityKit 中阴影的不透明度?

    我在 Reality Composer 中构建了一个场景 并在其中添加了 3 个对象 问题是阴影太强烈 黑暗 我尝试使用 RealityKit 中的定向光this答案而不是 Reality Composer 中的默认灯光 因为您没有调整其中
  • 将所有链接与特定文本匹配

    我正在寻找 PHP 中的正则表达式 它将锚点与其上的特定文本相匹配 例如 我想获得带有文本 mylink 的锚点 例如 a href blabla mylink a 所以它应该匹配所有锚点 但前提是它们包含特定文本所以它应该匹配这些字符串
  • 仅删除唯一元素

    有很多关于如何删除重复项和类似问题的资源 但我似乎无法找到任何有关删除唯一元素的资源 我正在使用 SWI Prolog 但我不想使用内置程序来实现此目的 也就是说 调用remove unique 1 2 2 3 4 5 7 6 7 X 应该
  • 为什么 Fragment 中的 Viewmodel 实例会泄漏

    我正在使用视图模型和实时数据来观察编辑文本视图中的变化 如下所示 当我使用leakcanar运行应用程序时 它向我显示内存泄漏 Mainactivity fragviewmodel泄漏 FragViewModel model Overrid
  • C# - 如何使用 DirectorySecurity.SetOwner() ?我有麻烦了

    我很难弄清楚SetOwner 方法 就我而言 我通过代码在 Active Directory 中创建了一个用户 然后为该用户创建了一个文件夹 一切正常 但我无法将新创建的用户设置为文件夹的所有者 我不是 C 专家 所以我很难理解Direct
  • 根据文件名中的日期创建批处理文件并移动文件

    我有大量的 Excel 文件 其文件名都以时间戳结尾 如下所示 示例文件 2018 08 24 110222 xlsx 我想根据时间戳的月份和年份移动所有这些文件 但我希望文件夹名称为上个月 因此 对于上面的示例 我想创建一个名为 July
  • django.db.migrations.exceptions.InconsistencyMigrationHistory

    当我跑步时python manage py migrate在我的 Django 项目中 我收到以下错误 Traceback most recent call last File manage py line 22 in
  • Matlab GUI 自动化?

    假设有人使用 GUIDE 制作了一个 Matlab GUI 现在我想在编程环境中使用该代码 这不是人在循环中 对我来说 编写 人类与 GUI 交互的最简单方法是什么 以便以适当的顺序操纵各种控件 使工具处理我的数字并获得其结果 我正在寻找一
  • 将击键发送到另一个应用程序 C#

    我需要自动化文件监控程序使用过滤器启动 保存它生成的日志 然后退出 我的解决方案是编写一个辅助应用程序来完成所有这些工作 它可以使用指定的过滤器启动并终止进程 但我仍然需要它来保存日志 您认为发送应用程序击键来保存日志会很愚蠢吗 例如 我会
  • ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY

    大家好 今天我为 ASP NET 网站添加了 SSL 证书 添加证书后 我收到 ERR HTTP2 INADEQUATE TRANSPORT SECURITY 错误 如果我使用 http 访问网站 它可以工作 但 https 会给出错误 在
  • java.lang.ClassNotFoundException:com.mysql.jdbc.Driver(maven + jboss)

    Maven pom xml
  • 字符串值到字节数组而不进行转换

    我试图将字符串的值放入字节数组中而不更改字符 这是因为字符串实际上是数据的字节表示 目标是将输入字符串移动到字节数组中 然后使用以下方法转换字节数组 string result System Text Encoding UTF8 GetSt
  • 方法重载是否被视为多态? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 方法重载是否被视为多态性的一部分 多态性有不同类型 重载多态性 也称为临时多态性 压倒一切的多态性 所以是的 它是多态性的一部分
  • 使用 Java 对 LPT 端口进行编程。真的吗?

    状况 OS is Windows XP have LPT port LED 灯泡连接到LPT port 必要的 使用Java使灯泡闪烁 是否可以 对真实 经过验证的解决方案感兴趣 有人这样做过吗 我有几个选择 使用javax comm an
  • Android 无法在外部存储上创建文件

    我想创建一个 txt 文件并将其存储在 Android 手机的外部存储中 我将权限添加到我的 Android 清单中 当我运行代码时 它不会给我任何错误 但文件从未创建 不确定我做错了什么 public void createExterna
  • Rails 3 路由约束和正则表达式

    我正在寻找匹配的模式state city在路径中 除非状态变量等于 auth match state city gt cities index as gt state cities constraints gt state gt auth
  • GCC 的 -Wmaybe-uninitialized 是否会针对基于枚举的 switch 语句使用 -O1 生成虚假警告?

    我有一段以下形式的代码 typedef enum A 1 B EnumType int foo EnumType x int r switch x case A r 1 break case B r 2 break default r 1