使用附加值扩展枚举

2023-12-20

延长期限的常见做法是什么enum在C语言中?我有enum来自其他包含的内容,并希望用一些值来扩展它们。希望以下示例能够为我想要实现的目标提供直观的信息。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>

enum abc { A, B, C, };     /* from some other include */
enum def { abc, D, E, F }; /* extend enum from other include */

struct thing_s {
    enum def kind;         /* use extended enum */
    union {
        unsigned n;
        char c;
        char *str;
    } data;
};

void print_thing(struct thing_s *t) {
    switch (t->kind) {
        case A:
            fprintf(stdout, "%ul\n", t->data.n);
            break;
        case B:
        case C:
        case D:
            fprintf(stdout, "%s\n", t->data.str);
            break;
        case E:
        case F:
            fprintf(stdout, "%c\n", t->data.c);
            break;
        default:
            assert(0);
    }
}

int main(int argc, char *argv[]) {

    struct thing_s t;
    t.kind = A;
    t.data.n = 1;

    print_thing(&t);

    return EXIT_SUCCESS;
}

这不会编译出现“重复大小写值”错误,我理解这是因为abc被视为第一个值,因此它最终会为不同的符号带来重复的整数值。


您唯一关心的是积分常数是否唯一。只需分配第二个元素的第一个元素enum到第一个元素的最后一个元素enum加一。

enum abc { A, B, C, };     
enum def { D = C + 1, E, F }; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用附加值扩展枚举 的相关文章

随机推荐

  • 将 Material-ui 标签定位到左侧并左对齐

    我正在使用material ui com 上提供的单选按钮组件并已设置labelPlacement start 这已将标签放在左侧 但我还希望标签左对齐 同时将单选按钮保留在右侧
  • Obex 推送配置文件的 UUID

    我尝试打开一个套接字来侦听来自非 Android 设备的传入连接 Parcelable uuidExtra device getUuids String t uuidExtra 0 toString t t toUpperCase Log
  • 为什么 System.Random 类不是静态的?

    当您使用System Random类 你必须创建它的一个实例 为什么不是static 因为如果我想要一个 0 到 9 之间的随机数 我可以使用 staticmethod System Random Next int int int ourR
  • SQL 复制设置 - 几乎完成

    我正在尝试在两个 SQL Server 之间设置复制 我几乎已经完成了 但遇到了权限错误 看起来 服务器通过 VPN 连接 发行商 发行商 W2003 SQL 2005 域控制器 订阅服务器 W2008 SQL 2008 不在域上的独立服务
  • C# WebRequest 发送表单数据大小限制

    我正在尝试在 WebRequest 中发送表单数据 该函数工作正常并按预期返回 成功 响应流 但是 如果 data 变量的长度超过 30 000 个字符 我会遇到 HTTP 500 错误 Message The remote server
  • Selenium EventFiringWebDriver 导航事件

    我正在使用 Selenium Web 驱动程序 我想监听浏览器中发生的事件 例如 当页面上的某些 javascript 导致 url 使用以下命令更改时window location 我有一个监听器附加到Navigated我的事件Event
  • Asp.Net Core 5 API Web像WCF一样以流模式上传大文件

    我需要在用 asp net core 5 制作的网络服务器上以流模式 一次一个 上传一个大文件 7GB 配置服务器端 public class Program public static void Main string args Crea
  • 将 XML 数组转换为 XML 时出现奇怪的文本

    我使用这个问题的答案将 XML 数组转换为单个 XML 输出 将 XML 数组输出为纯 XML https stackoverflow com questions 2554671 output array of xml to plain x
  • 为什么这个救援语法有效?

    好的 我正在使用的应用程序有这种方法 并且它可以在生产中使用 我的问题为什么这有效 这是新的 Ruby 语法吗 def edit load elements current user unless current user role adm
  • AWS Elastic Beanstalk 中的自定义 URL

    AWS Elastic Beanstalk 建议使用以下格式的 URL https appname elasticbeanstalk com 但我需要将其更改为我自己的网址 例如https tarta ai 怎么做 Note 我的域使用 A
  • 如何在GDB中像数组一样查看指针?

    假设定义 int a 100 Type print a然后 gdb 会自动将其显示为数组 1 2 3 4 然而 如果a作为参数传递给函数 那么gdb会将其视为普通的int指针 类型print a将显示 int 0x7fffffffdaa0
  • 如何在UI底部的固定位置设置一个按钮?

    我希望一个按钮始终出现在 UI 页脚的固定位置 总是 无论它上面是否有组件 请在您的主布局下选择一个相对布局 将其高度和宽度设置为填充父项 并将其重力设置为底部 然后将任何文本视图或任何您想要的按钮放入其中
  • setup.py - 安装后将模块符号链接到 /usr/bin

    我几乎完成了 python 包的开发 并且还使用 distutils 编写了基本的 setup py usr bin env python author Prahlad Yeri description Small daemon to cr
  • 在外部 JavaScript 文件中使用 KnockoutJS ViewModel

    如何在外部 JS 文件中创建 KO JS ViewModel 然后在 html 文件中使用它 这看起来是一件很简单的事情 但我无法让它工作 也找不到任何关于如何做到这一点的明确信息 如果我忽略了 我会道歉 如果有人能指出我的答案 我会删除它
  • 使用字段数将文件拆分为更小的文件

    我很难将一个大的 50GB csv 文件分解成更小的部分 每行有几千个字段 一些字段是双引号中的字符串 其他字段是整数 小数和布尔值 我想逐行解析文件并按每行中的字段数进行分割 字符串可能包含多个逗号 例如 以及许多空字段 1 30 50
  • Delphi 2007 和 Logitech 网络摄像头驱动程序

    不久前 我遇到了 Delphi 2007 在 Logitech 网络摄像头驱动程序运行时无法运行和调试应用程序的问题 显然 罗技驱动程序会在每个正在运行的进程中插入一个存根 从而弄乱调试器的偏移量 已经一年多了 这仍然是一个问题吗 罗技是否
  • 如何在不调用 java.lang.String 的情况下检查 clojure 中字符串的相等性?

    clojure 有没有办法检查字符串的相等性 即我需要知道它们的内容是否相等 而不是位置 thanks Clojure 中的平等 函数 总是测试值 而不是身份 所以两个字符串是 如果它们有相同的内容 对于大多数 Java 类型 包括 Str
  • 使用 MongoDB 代替 MS SQL Server 的优点和缺点 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 NoSQL 世界的新手 正在考虑将 MS Sql Server 数据库替换为 MongoDB 我
  • 如何在 build.gradle 中检索 ADB 的路径

    我尝试通过启动应用程序gradle task task runDebug dependsOn installDebug run task run type Exec commandLine adb shell am start n com
  • 使用附加值扩展枚举

    延长期限的常见做法是什么enum在C语言中 我有enum来自其他包含的内容 并希望用一些值来扩展它们 希望以下示例能够为我想要实现的目标提供直观的信息 include