枚举可以保存大于 INT_MAX 的无符号整数吗?

2024-03-04

enum Some_Flag {
        SOME_FLAG_A = 0x00000000u,
        SOME_FLAG_B = 0x00000001u,
        SOME_FLAG_C = 0x00000002u,
        /* ... */
        SOME_FLAG_Z = 0x80000000u,
};

uint32_t a;
a = SOME_FLAG_Z;

假设 32 位整数... 这在 C 中有效吗?

该标准对我来说似乎含糊不清。

EDIT:

引用标准:

6.4.4.3 枚举常量

语义学

2 声明为枚举常量的标识符的类型为 int。 前向引用:枚举说明符 (6.7.2.2)。

6.7.2.2 枚举说明符

约束条件

2 定义枚举常量值的表达式应 是一个整数常量表达式,其值可表示为 国际。

语义学

3 枚举器列表中的标识符被声明为常量, 具有 int 类型,并且可以出现在任何允许的地方。127) 带有 = 的枚举器将其枚举常量定义为 常数表达式。如果第一个枚举器没有 =,则其值 枚举常量为 0。随后的每个不带 = 的枚举器定义 其枚举常量作为常量表达式的值 通过将先前的枚举常量的值加 1 来获得。 (使用带有 = 的枚举器可能会产生带有 与同一枚举中的其他值重复的值。) 枚举的枚举数也称为其成员。

4 每个枚举类型应与 char(有符号整数)兼容 类型,或无符号整数类型。类型的选择是 实现定义的,128)但应能够代表 枚举所有成员的值。枚举类型为 直到紧接在终止列表的 } 之后才完整 枚举器声明,然后完成。

C11草案 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

这些约束似乎清楚地表明枚举是 int,但 6.7.2.2_4 似乎允许无符号整数 ¿


您的代码无效:

C90(6.5.2.2,枚举说明符):

约束条件

定义枚举常量值的表达式应为整型常量表达式,其值可表示为int.

C99(C11 草案中未更改)(6.7.2.2,枚举说明符):

约束条件

  1. 定义枚举常量值的表达式应为整数常量表达式,其值可表示为int.

您的值超出了 32 位的范围int,所以这是一个错误(需要诊断)。

请注意,这严格涉及枚举常量的“初始化器”。例如,如果我们有

enum foo { BAR = 42u };

那么这个约束表示该值42u必须能够适应int(确实如此;它只是一个无符号 42,并且 42 适合int).

的类型BAR本身就是int(令人惊讶的是,不enum foo).

但是如果你声明一个类型的变量enum foo,那么它的大小和符号是实现定义的。它将基于一些现有的整数类型(可以存储所有枚举值),但实际使用的类型在实现之间可能有所不同(以及不同的实现之间)enum types).

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

枚举可以保存大于 INT_MAX 的无符号整数吗? 的相关文章

  • 与 MinGW 的静态和动态/共享链接

    我想从一个简单的链接用法开始来解释我的问题 假设有一个图书馆z它可以编译为共享库 libz dll D libs z shared libz dll 或静态库 libz a D libs z static libz a 让我想要链接它 然后
  • 如何使用不同的基本路径托管 Blazor WebAssembly 应用程序

    我有一个 Blazor Webassemble NET 托管应用程序 在我们托管它的服务器上 应用程序的基本路径将是mydomain com coolapp 因此 为了尝试让应用程序在服务器上正确呈现 我一直遵循本页 应用程序基本路径 部分
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 重载算术运算符

    赋值运算符可以声明为 T 运算符 const t 在类中 但不能以这种方式定义算术运算符 它必须是友元函数 我不明白为什么 你能解释一下吗 算术运算符不必须是友元 那么你可以这样定义 MyClass MyClass operator con
  • 当我尝试传递临时地址作为参数时,它是一个 UB 吗?

    对于以下 C 代码 include
  • C# 可以为控制台应用程序部分类“程序”类吗?

    我想知道是否可以将为任何控制台应用程序创建的默认 程序 类更改为部分类 我想这样做是因为我想要更好的组织 而不是将所有方法都放在按区域分类的 1 个文件中 对我来说 将某些方法类别放在单独的文件中会更有意义 我对分部类的理解是 它是多个文件
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 如何在VS2005中使用从.bat而不是.exe启动的外部程序进行调试?

    在我的 c 项目的调试属性中 我选择了 启动外部程序 并选择了我希望将调试器附加到的程序的 exe 但是 现在我需要从 bat 文件而不是 exe 启动程序 但 VS2005 似乎不允许这样做 这可能吗 编辑 为了澄清 我需要调试从 bat
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • Windows Phone 的 JSON 反序列化

    我正在尝试反序列化以下 JSON 但我真的不知道如何使用 JSON net 来完成这项工作 我正在使用 C 和 JSON Net 库 我的 JSON 如下 found 3 bounds 43 54919 172 62148 43 54487
  • C++ 中的析构函数

    我的 AB h 文件中有一个构造函数 class AB private int i public AB i 0 constructor AB i 0 destructor virtual void methodA unsigned int
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗
  • 如何从Python枚举类中获取所有值?

    我正在使用 Enum4 库创建一个枚举类 如下所示 class Color Enum RED 1 BLUE 2 我要打印 1 2 作为某处的列表 我怎样才能实现这个目标 您可以执行以下操作 e value for e in Color
  • 如何使用 Microsoft Graph API 更新 MailboxSettings

    我想从不同的日历更新邮箱设置 如何构建可以通过 Microsoft Graph 更新 MailboxSetting 的请求 这是我的代码示例 但有例外 代码示例 User obj GraphServiceClient Users roomC

随机推荐

  • [SPLoaderError.loadComponentError]:***无法加载组件

    我在 Sharepoint Framework 中开发了一个 webpart 当我使用 gulp build 编译它时 它编译得很好 但是当我执行 gulpserve 并将 webpart 添加到工作台时 我收到此错误 SPLoaderEr
  • 如何解决“致命错误:未找到类‘MySQLi’”?

    我正在做教程并收到此错误 致命错误 第 8 行未找到类 MySQLi 长 URL 第 8 行的代码是 mysqli new MySQLi db server db user db pass db name 我在网上看到有人说看看我的 php
  • 规则引擎 - 优点和缺点

    我正在审核一个使用所谓的规则引擎 http en wikipedia org wiki Business rules engine 简而言之 这是一种从应用程序代码外部化业务逻辑的方法 这个概念对我来说是全新的 我对此非常怀疑 听到人们谈论
  • 如何使用react-router从hash URL获取参数?

    使用react router从HASH URL获取URL参数的任何方法 您应该能够访问您的位置
  • Openpyxl - 复制和粘贴数据时出现空行

    我编写了一个脚本 将数据从一个工作簿复制到另一个工作簿 我唯一的问题是数据之间添加了空单元格 谁能理解为什么 看起来脚本正在跳过不满足 if 语句条件的值 但仍然复制空白单元格 from openpyxl import load workb
  • 我可以在 Emacs 中使用 ido 模式风格完成搜索标签吗?

    是否可以使用 ido 模式补全来查找 TAGS 文件中的定义 我怀疑 ido completing read 是答案的一部分 这是我的非工作代码 它显示了一个未填充的 ido 模式迷你缓冲区 defun ido choose from ta
  • JAR 和包有什么区别?

    JAR 文件和包之间有什么区别吗 包是一种方式逻辑上组织你的课程 例如 您可以声明package com foo 在每个源文件的顶部 这些源文件相关性足以驻留在com foo打包在一起 Java 编译器和运行时也会期望您将此类文件放置在路径
  • 如何将 Excel 文件转换为 .csv 文件?

    我正在为 Honeywell Dolphin 6100 开发一个应用程序 这是一款带有条形码扫描仪的移动计算机 使用 Windows CE 5 0 等操作系统 我想创建一个小应用程序 负责将 excel 文件转换为 csv 文件 在Win
  • 可点击的SVG图像来运行方法

    我创建了一个需要交互的地图 火车 的 SVG 图像 当单击地图的一部分时 颜色将会改变 并且将执行控制事物的方法 通过树莓派 将按钮连接到插槽很简单 我猜想 self path clicked connect self some func
  • 你能让mockito(1.10.17)使用接口中的默认方法吗?

    我是mockito的忠实粉丝 不幸的是我的项目之一 https github com fge throwing lambdas它使用 Java 8 它对我来说失败了 设想 public final class MockTest Test p
  • 使用谷歌日历 API oauth2 服务帐户(node.js)模拟用户

    我正在尝试通过 google calendar API 使用服务器进行服务器身份验证 他们在文档中提到您可以冒充用户 我已向我想要模拟的帐户添加了所有者权限 并确保启用了域范围的委派 据我所知 user example 应该指定模仿者 但它
  • WPF 中是否有类似于 DataTemplate 的 Style.BasedOn 的东西?

    目前 我有两个非常大的 DataTemplate 对象来在两个列表框中显示两组项目 DataTemplate 在两个 ListBox 的 ItemContainerStyle 属性中设置的两个 Style 的 ContentTemplate
  • 要求 CLI 部署到不同的环境?

    是否可以使用 Alexa Skill Kit 的ASK CLI https developer amazon com docs smapi ask cli command reference html deploy command depl
  • R 中的多重随机采样

    我目前有一个名为 Liquidation 的数据框 我想在其中运行 30 个随机样本 每个样本有 1000 个观察值 指定哪个帐户来自哪个样本 然后将其合并到一个新的数据框中 其中包含所有 30 个样本 以下是我在使用 dplyr 包进行随
  • 如何获取已登录的本地 Windows 用户列表?

    我正在尝试为 Windows 编写一个更快的用户切换应用程序 Win L 选择用户非常麻烦 如果我以管理员身份启动任务管理器 它会显示活动用户 我可以选择一个用户并 连接 如果我输入他们的密码 如何获取所有用户 或所有活跃用户 的列表 我正
  • 如何在 VS Code 中设置 Julia?

    我拥有纯 Windows Visual Studio 编程背景 几乎没有 Linux 经验 似乎可以使用VS Code https code visualstudio com 在 Julia 中编程 但我不知道如何正确设置 有人有好的例子吗
  • Printf 未在此范围内声明

    我刚刚开始学习 C 但是我提到的书中的第一个程序会生成一个错误 printf 未在此范围内声明 I am typing the code exactly as it is given in the book Still the error
  • 升级到 Angular 13 后的 Mixins / Webpack 问题

    将我的项目升级到 Angular 13 后 我在运行时收到以下错误ng serve 我也包括两者package json and webpack config js以下文件 我已经尝试删除node modules文件夹并运行npm inst
  • 从使用 JavaScript 的网站将数据抓取到 Google 表格

    我正在尝试将数据从以下网站导入到 Google 表格 我想导入当天的所有比赛 https www tournamentsoftware com tournament b731fdcd a0c8 4558 9344 2a14c267ee8b
  • 枚举可以保存大于 INT_MAX 的无符号整数吗?

    enum Some Flag SOME FLAG A 0x00000000u SOME FLAG B 0x00000001u SOME FLAG C 0x00000002u SOME FLAG Z 0x80000000u uint32 t