c将typedef放入struct中

时间:2015-01-20 14:00:14

标签: c struct typedef

我有一个关于组合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? 感谢

3 个答案:

答案 0 :(得分:1)

我会回答这个问题

  

现在我的问题是,我还可以写下这样的内容:

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;

现在,您可以通过标记 intab创建类型为c的其他变量,以便

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;

要创建多个varibales,您需要添加逗号,例如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)之间没有逗号,这就是它产生问题的原因!!

为了使其有效,只需在结构e相同的两个标记 enumDefenum _enumDef {...}之间添加逗号:

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

答案 1 :(得分:1)

  

是否有可能将typedef包含在struct中?

根据C标准,

结构中不允许使用存储类说明符。

因此,您无法在结构

中拥有typedef成员

答案 2 :(得分:1)

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

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

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