我想知道在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_1
, VALUE_2
和VALUE_3
是不正确的,因为它们不是常量,而是联合的成员。
TYPE_1
, TYPE_2
和TYPE_3
将是全局可访问的,无论相应的enum
位于结构中。
联合发生的事情是其中定义的所有对象占用相同的内存。 读取与最后写入的对象不同的对象是非法的。
在
union blah { int bleh; double blih; char bloh[42]; }; union blah myobject;
myobject
包含int
, double
或char[]
。 而且没有迹象表明哪一个是正确的。 该指示必须由程序员保存在其他地方:
int lastblahwrite; /* 0: int; 1: double; 2: char[] */ strcpy(myobject.bloh, "The quick brown dog"); lastblahwrite = 2;
以后这可以用作
switch (lastblahwrite) { case 0: printf("%dn", myobject.bleh); break; case 1: printf("%fn", myobject.blih); break; case 2: printf("%sn", myobject.bloh); break; default: assert(!"this didn't happen"); break; }
为了使管理更容易,不如使用两个单独的变量,通常将union本身和指示符变量分组到结构中,如示例所示。
管理层仍然必须由程序员编写。 没有什么是自动的。
以上就是c/c++开发分享结构中的枚举; 新手在交流相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/541690.html