我有一个关于组合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 st
和st.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? 感谢
答案 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;
现在,您可以通过标记 int
或a
或b
创建类型为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 标记(e
和enumDef
)之间没有逗号,这就是它产生问题的原因!!
为了使其有效,只需在结构e
的相同的两个标记 enumDef
和enum _enumDef {...}
之间添加逗号:
typedef enum _enumDef{A,B,C} enumDef, e;
答案 1 :(得分:1)
根据C标准,是否有可能将typedef包含在struct中?
结构中不允许使用存储类说明符。
因此,您无法在结构
中拥有typedef
成员
答案 2 :(得分:1)
如果您认为结构中的{}
定义了一个范围,它会告诉您这些括号中的所有内容都是结构的本地内容,并且即使允许使用C语言,在其中放置一个typedef也不会增加太多你去做。
(发明概念性命名空间实现可能会提供某种structDef::enumDef
语法,但这不是C的一部分。)
如果你需要在struct之外使用枚举类型,那么它应该在struct之外的typedef。您给出的第一个示例是正确的用法。