声明通用变量类型

2023-12-29

我正在尝试在 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(使用前将#替换为@)

声明通用变量类型 的相关文章

随机推荐

  • Antd - 有没有办法改变卡片标题的背景颜色?

    通过添加 style 属性 我只能更改 Card 组件主体部分的颜色 我怎样才能更改标题部分
  • 我是否需要内存屏障来访问已完成的线程修改的内存?

    以下为 C 术语 我有一个线程 A 和线程 B 共享对整数值 P 的访问 线程 A 初始化该值并在运行时更新它 然后线程A完成 线程 B 等待线程 A 完成 标准操作系统 API 调用 无论使用什么操作系统 并想要读取 P 线程 B 是否需
  • MySQL 更新并从另一个表中选择

    我有3张桌子 Kommuner 和 Fylker 公司 公司表有一个空字段forretningsadresse fylke但另一个领域forretningsadresse kommune有一个值 所以基本上 我需要填写forretnings
  • 表与两个相关表的总和

    我在这里提出这个 我确信是 简单的问题 我不知道如何解决 我有这个架构 有了这个数据 我的预期结果是 对于 约翰 纳什 PERSON NAME TOTAL FRUIT TOTAL COOKIE JOHN NASH 10 38 对于 奥斯卡
  • 包装一个对象

    我有一个对象 它有一堆公共属性 没有 getter 和 setter 坏的 因此 我创建了一个包含属性的类 并为它们创建了 getter 和 setter 我的计划是将对象包装在我的类中 因此这意味着不能直接访问属性 我有点不确定该怎么做
  • 如何在 Web Api 操作中锁定长异步调用?

    我有这样的场景 我有一个 WebApi 和一个端点 触发时会执行大量工作 大约 2 5 分钟 这是一个具有副作用的 POST 端点 我想限制执行 以便如果向此端点发送 2 个请求 不应该发生 但安全总比遗憾更好 其中一个请求将必须等待以避免
  • Android手机与穿戴模块之间共享文件

    几个月前 我最初只使用移动模块开始我的项目 现在我也有兴趣为可穿戴设备配置我的应用程序 也就是说 我的所有文件 Java XML drawables 等 都在移动模块中 所以我是否需要将我想要在移动模块和可穿戴模块之间共享的所有文件传输到新
  • 如何获取 Tensorflow seq2seq 嵌入输出

    我正在尝试使用张量流训练序列到序列模型 并一直在查看他们的示例代码 我希望能够访问编码器创建的向量嵌入 因为它们似乎具有一些有趣的属性 然而 我真的不清楚这是怎么回事 在单词的向量表示示例中 他们详细讨论了这些嵌入的用途 但似乎没有提供访问
  • 如何在开发机器上使用ansible模板本地创建文件

    我从 ansible 开始 正在寻找一种方法来使用 ansible 剧本在服务器和本地环境上创建样板项目 我想在本地使用 ansible 模板来创建一些通用文件 但是我如何使用ansible在本地执行某些操作呢 我读了一些 local ac
  • SSRS 报告每个参数值的重复表

    大家对这里的一般性问题感到抱歉 但我一直在互联网上查找 但找不到解决方案 我有一份 SSRS 报告 在运行之前用户必须输入一个参数 Location 在查询中 指定仅返回该位置匹配的结果 IE where Company location
  • 在reactjs中切换下拉菜单

    我的导航栏上有一个简单的下拉菜单的以下代码 https jsfiddle net jL3yyk98 10 https jsfiddle net jL3yyk98 10 索引 html div div 导航菜单 js var NavMenu
  • Polymer:在纸张按钮按“确定”后获取纸张对话框内的纸张输入值

    我需要在按下 确定 纸张按钮后获取纸张对话框内某些纸张输入字段的值 I have
  • 检查时间是否在某一分钟内的最佳方法是什么?

    我想编写一个简单的 python 脚本 它将检查是否是给定小时 分钟之前的 2 分钟 然后每天或在给定时间的给定日期调用我的函数 该脚本将在 cronjob 中每分钟运行一次 所以执行myfunction 的两种情况 每天 10 55201
  • 如何更改 Tkinter 按钮周围框的颜色?

    我尝试了在 Stackoverflow 上找到的一些东西 例如在按钮周围放置一个框架并为其指定颜色 就像所说的那样here https stackoverflow com questions 53101307 how do i change
  • 两个不常见的PHP运算符一起使用来获取图像像素颜色,请解释

    The PHP 图像颜色 http www php net manual en function imagecolorat php函数可用于获取图像像素的 RGB 值 如文档中所示 im imagecreatefrompng php png
  • 在连接中广播左表

    这是我的加入 df df small join df big id leftanti 它似乎我只能广播正确的数据帧 https stackoverflow com questions 62735494 broadcast join in s
  • 如何使用 Zebra P4t 打印机打印带有尖音符(如“é”)的法语字符

    我的问题是关于用尖音符打印法语字符 例如 etc with a 斑马 P4t 打印机 考虑下面的 ZPL 指令 XA FO20 20 CI28 A0 20 20 FD Amiti FS XZ 我已将这些指令放入编码为 UTF 8 的文件中
  • 使用 Enum.Parse() 时出现意外结果

    class Program static void Main string args String value Two Type enumType typeof Numbers Numbers number Numbers Enum Par
  • Apache Spark 消息理解

    请求帮助来理解此消息 INFO spark MapOutputTrackerMaster Size of output statuses for shuffle 2 is 2202921 bytes 2202921在这里是什么意思 我的工作
  • 声明通用变量类型

    我正在尝试在 C 中声明通用变量类型 我不能使用 C 并且我想到了以下选项 Option1 typedef struct void value ElementType e type Data t Option 2 typedef struc