enum in a struct; 新手在ac

Dan*_*ugg 3 c enums struct pointers adt

我想知道enumstruct(inC)中使用a 的语法

我已经看过各种例子,其中struct+ union/ enum组合用于创建复杂类型,例如:

struct MyStruct{
    enum{
        TYPE_1,
        TYPE_2,
        TYPE_3,
    } type;
    union{
        int value_1;
        int value_2;
        int value_3;
    } value;
};

// ...

struct MyStruct test_struct;
Run Code Online (Sandbox Code Playgroud)

无论如何,从这个例子中,我将如何根据enum字段存储/测试当前的"类型" ?

如果我有指针test_struct,这似乎不起作用; 踢回未知成员错误:

struct MyStruct *test_pointer = &test_struct;

test_pointer->value = test_pointer->VALUE_1;
Run Code Online (Sandbox Code Playgroud)

我只是好奇,我是否需要将enum值作为全局值来访问?

test_pointer->value = VALUE_1;
Run Code Online (Sandbox Code Playgroud)

任何澄清将不胜感激.

Bla*_*iev 6

这样的结构的预期用法将是这样的:

switch (test_struct.type) {
  case TYPE_1:
    printf("%d", test_struct.value.value_1);
    break;

  case TYPE_2:
    printf("%d", test_struct.value.value_2);
    break;

  case TYPE_3:
    printf("%d", test_struct.value.value_3);
    break;
}
Run Code Online (Sandbox Code Playgroud)

注意大写VALUE_1,VALUE_2并且VALUE_3是不正确的,因为它们不是常量而是联合的成员.

TYPE_1,TYPE_2并且TYPE_3将是全球可访问的,不管是相应enum驻留在结构中.