首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查看联合中当前使用的是什么类型?

如何查看联合中当前使用的是什么类型?
EN

Stack Overflow用户
提问于 2013-05-18 18:28:26
回答 6查看 14.1K关注 0票数 42

假设我们有一个联盟:

代码语言:javascript
复制
typedef union someunion {
    int a;
    double b;
} myunion;

在我设置了例如a=123之后,是否可以检查联合中的类型?我的方法是将这个联合添加到某个结构中,并在int为int时将uniontype设置为1,当为double时将uniontype设置为2。

代码语言:javascript
复制
typedef struct somestruct {
    int uniontype
    myunion numbers;
} mystruct;

有没有更好的解决方案?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-18 18:30:00

有没有更好的解决方案?

不,你展示的解决方案是最好的(也是唯一的)。union非常简单--它们不会“跟踪”你分配给了什么。它们所做的就是让您为所有的成员重用相同的内存范围。除此之外,它们不提供任何其他内容,因此将它们封装在struct中并使用"type“字段进行跟踪正是正确的做法。

票数 37
EN

Stack Overflow用户

发布于 2013-05-18 18:31:27

C不会自动跟踪联合中当前正在使用的字段。(事实上,我认为从“错误”字段读取会导致实现定义的行为。)因此,由您的代码来跟踪当前使用/填充的是哪一个。

你保持一个单独的'uniontype‘变量的方法是一种非常常见的方法,并且应该工作得很好。

票数 7
EN

Stack Overflow用户

发布于 2013-05-18 18:31:48

无法直接查询当前存储在union中的类型。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16623226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档