我正在尝试在 C 中声明通用变量类型(我不能使用 C++),并且我想到了以下选项。
Option1
typedef struct
{
void *value;
ElementType_e type;
} Data_t;
Option 2
typedef struct {
ElementType_e type;
union {
int a;
float b;
char c;
} my_union;
} my_struct;
其中 ElementType_e 是一个枚举,包含所有可能的变量类型(例如 int、char、unsigned int 等)。我有点倾向于选项 1,因为我不相信与 switch 相比,转换会增加额外的计算时间,对吧?
我只是想知道哪种类型更有用?我知道选项 1 需要在每次使用/访问时进行转换。转换时是否可能出现任何问题(特别是在不同平台上运行/编译代码,例如 32 位和 16 位微平台)
而 option2 需要 switch () 来执行任何操作(例如加法,...)。
下面的链接解释了选项2更好(从可读性的角度来看),但我主要关心代码大小和计算成本。C 中的通用数据类型 [ void * ] https://stackoverflow.com/questions/5551427/generic-data-type-in-c-void
选角时是否可能出现任何问题
不,因为您不想进行强制转换,因为在从/向某个对象分配时不需要进行强制转换void
- 指针(在 C 中)。
我只是想知道哪种类型更有用?
两者都是如此,所以这取决于,因为
- 1 适合懒惰的人(因为它只需很少的输入,并且需要记住很少的不同变量的名称)。
- 2 适合谨慎使用(因为它是类型保存的,与选项 1 不同,选项 1 会丢失“真实”类型信息,因此您甚至可以分配不在其中的类型的变量地址
ElementType_e
).
参考一个comment https://stackoverflow.com/questions/31348025/declare-generic-variable-type#comment50680799_31348277:
关于性能,我预计这两种方法之间没有重大差异(如果实现合理的话),因为这两个选项都需要在赋值/从赋值时使用条件语句(这里的例外是指针变量,对于选项 1 来说,它不需要赋值条件语句)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)