c - 结构中的枚举; c的新手

标签 c pointers enums struct adt

我想知道在 struct 中使用 enum 的语法(C 中)

我见过各种使用 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;

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

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

struct MyStruct *test_pointer = &test_struct;

test_pointer->value = test_pointer->VALUE_1;

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

test_pointer->value = VALUE_1;

如有任何说明,我们将不胜感激。

最佳答案

这种结构的预期用途是这样的:

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;
}

请注意,大写 VALUE_1VALUE_2VALUE_3 是不正确的,因为它们不是常量,而是 union 的成员。

TYPE_1TYPE_2TYPE_3 将是全局可访问的,无论相应的 enum 位于结构。

关于c - 结构中的枚举; c的新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902744/

相关文章:

C编译器认为char类型是int类型 - clang编译器

c - 冒泡排序问题

c++ - 在C++中将指针设置为指针数据

c++ - 学习使用 Boost 共享指针,控制台输出正确吗?

c++ - C++ | BST对节点指针的引用与节点指针

c - 从枚举中删除一个值而不更改其他值

c - 如何使用 STM32 HAL_CAN 库生成格式正确的 TX CAN 帧?

c - 如何在 Visual Studio 2019 中只编译一个 C 文件?

enums - Nlog 枚举到整数

c++ - 头文件中的外部枚举