Какова общая практика для расширения enum
в C?У меня есть enum
s из других включений, и я хотел бы расширить их несколькими значениями.Надеемся, что в следующем примере представлена интуиция для того, чего я хотел бы достичь.
#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
рассматривается какпервое значение, поэтому оно заканчивается дублирующимися целочисленными значениями для различных символов.