繁体   English   中英

c将typedef放入struct

[英]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吗? 谢谢

我会回答这个问题

现在我的问题是,我还能写点类似的东西吗?

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

我会给您相似之处,以便您看到问题所在

当你想创建一个int你写

int a,b,c;

所以int是类型,而a b c是变量

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;

让我们回到下面的问题看看语法和相似性的问题

 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;

有没有可能将typedef包含到结构中?

根据C标准,在结构内不允许使用存储类说明符。

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

如果您认为结构中的{}定义了范围,它将告诉您括号内的所有内容都是该结构的本地内容,即使C语言允许您在其中放置typedef也不会增加太多。

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

如果需要在结构外部使用枚举类型,则应在结构外部进行类型定义。 您提供的第一个示例是正确的用法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM