gpt4 book ai didi

c - 在枚举声明中使用数据类型

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:23 26 4
gpt4 key购买 nike

我可以做这样的事情吗?我想在我的枚举 type_t 中使用数据类型而不是常量。

typedef struct {
char id;
long data;
} type1_t;

typedef struct {
char id;
long data;
float moredata;
} type2_t;

typedef enum {
type1_t, type2_t
} type_t;

typedef struct {
type_t type;
char* something;
} midas;

midas obj1;
obj1.type = type1_t;
obj1.type.id = 0;
obj1.type.data = 123;

midas obj2;
obj2.type = type2_t;
obj2.type.id = 3;
obj2.type.data = 456;
obj2.type.moredata = 3.14;

在示例中,midas 结构的 type 变量应引用 type1_ttype2_t。所以如果我将类型设置为 type2_t,它的大小应该比我设置 type1_t 时更大。

最佳答案

不,你不能那样做。如果您使用的是 C++,则可以使用模板来实现这一点。但是C中没有“type enum”机制。

你可以考虑 union :

typedef enum {
type1, type2
} type_t;

typedef struct {
type_t typecode;
union {
type1_t type1value;
type2_t type2value;
};
char* something;
} midas;

这会导致midas.type1valuemidas.type2value占用相同的内存空间。 union 占用的内存量将等于存储它包含的最大数据类型所需的内存量。

然后您将不得不查看 midas.typecode 并考虑使用哪个 union 成员。如果您使用错误的数据,您将得到无效数据,这可能会导致程序崩溃,所以要小心。

关于c - 在枚举声明中使用数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4148916/

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