c 将 typedef 放入结构中

c put typedef into struct

我有一个关于组合 typedef 和 struct 的问题

我想要一个结构 st,包含一个 enum e 和元素,即 {A,B,C}。 稍后在我的代码中,我希望能够写:

st.e=A;

一种可能是将以下代码写入头文件

typedef enum _enumDef{A,B,C} enumDef;
typedef struct _structDef{
    enumDef e;
    ...
}structDef;

然后在我的 c 文件中键入 structDef stst.e=A

现在我的问题是,我是否也可以这样写:

typedef struct _structDef{
    typedef enum _enumDef{A,B,C} enumDef e;
    ...
}structDef;

?上面这个不行。但是可以写

tyedef struct _structDef{
    enum _enumDef{A,B,C} e;
    ...
}structDef;

但后来我无法写 st.e=A 因为枚举不被称为全局参数。相反,我必须写 st.e=st.A

所以我的问题是,是否有可能将 typedef 包含到结构中?我认为,枚举来自哪个上下文,它看起来更好,也更容易理解。或者这完全不寻常,我应该把它从我的脑海中清除 :D ? 谢谢

我会回答这个问题

Now my question is, can I also write something like:

typedef struct _structDef{
typedef enum _enumDef{A,B,C} enumDef e;
... }structDef; ?

我给你相似度,这样你就可以看到问题了

当您想创建一个 int 你写

int a,b,c;

所以int是类型,abc是变量

typedef int a,b,c;

现在您可以通过 标签 abc 创建类型为 int 的其他变量,因此

a variable1; //is the same as ==> int variable1;
b variable2; //is the same as ==> int variable2;
c variable3; //is the same as ==> int variable3;

让我们return解决我们的问题,看看下面的语法和相似性

 enum _enumDef{A,B,C} e;
 |------------------| 
          |
 |------------------|
         int          e;

为了创建许多变量,您需要添加逗号,如 int

 enum _enumDef{A,B,C} a,b,c;
 |------------------| |----|
          |              |---->variables;
 |------------------| |----|
         int          a,b,c;

这里的问题

typedef enum _enumDef{A,B,C} enumDef e;
                             |--------| 
                                   |-------> no comma (ERROR)

两个 SAME 标签(eenumDef)之间是否没有逗号,这就是它产生问题的原因!!

为了使其正常工作,只需在结构 enum _enumDef {...} 相同的两个标签 eenumDef 之间添加逗号:

typedef enum _enumDef{A,B,C} enumDef, e;

is there any possibility, to include the typedef into the struct?

根据 C 标准,结构中不允许存储 class 说明符。

所以你不能在结构中有 typedef 成员

如果您将结构中的 {} 视为定义范围,它会告诉您这些括号内的所有内容都是该结构的本地内容,并且将 typedef 放在那里不会增加太多,即使 C语言允许你这样做。

(发明一个概念性命名空间实现可能会提供某种 structDef::enumDef 语法,但这不是 C 的一部分。)

如果您需要在结构之外使用枚举类型,那么它应该在结构之外进行typedef。你给出的第一个例子是正确的用法。