gpt4 book ai didi

c - 用附加值扩展枚举

转载 作者:太空狗 更新时间:2023-10-29 15:28:19 27 4
gpt4 key购买 nike

在 C 中扩展 enum 的常见做法是什么?我有来自其他包含的 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 };

关于c - 用附加值扩展枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50361893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com