是否可以在 C 中的结构内键入定义联合

Posted

技术标签:

【中文标题】是否可以在 C 中的结构内键入定义联合【英文标题】:Is it possible to typedef union inside a struct in C 【发布时间】:2022-01-05 05:38:39 【问题描述】:

我真的不明白联合是如何运作的。有人可以解释它是如何工作的吗?我可以 typedef 工会吗?如果答案是肯定的,我该怎么做?下面这段代码有什么问题?

typedef struct Car
        int age;
        int weight;

        enum Type  Tesla, Lada  type;

        typedef union Consumption
                double litre;
                int kwh;
         Consumption;

        Consumption consumption;
 Car;

当我尝试编译此代码时出现错误代码:

union1.c:9:2: error: expected specifier-qualifier-list before ‘typedef’
  typedef union Consumption
  ^~~~~~~

【问题讨论】:

为什么要尝试?即使您可以定义它,C 也没有访问该联合所需的范围概念。它最终会在Car 之外。 【参考方案1】:

typedef 不能存在于 structunion 内。然而,这并不意味着您不能在另一个内部定义 structunion。例如:

typedef struct Car
        int age;
        int weight;

        enum Type  Tesla, Lada  type;

        union Consumption
                double litre;
                int kwh;
         consumption;
 Car;

【讨论】:

以上是关于是否可以在 C 中的结构内键入定义联合的主要内容,如果未能解决你的问题,请参考以下文章

自定义类型详解(结构体+枚举+联合)C进阶

C语言自定义数据类型中的结构体,枚举,联合详解

c语言篇 +自定义类型(枚举联合结构体)以及位段

C语言学习笔记(15)自定义类型:结构体,枚举,联合

C语言——自定义类型(结构体+枚举+联合)

C语言自定义数据类型:结构体,枚举,联合