[英]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 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吗? 谢谢
我会回答这个问题
现在我的问题是,我还能写点类似的东西吗?
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;
现在,您可以通过标签 a
或b
或c
创建其他类型为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标记( e
和enumDef
)之间没有逗号,这就是它产生问题的原因!
为了使其工作,只需在结构enum _enumDef {...}
的相同两个标签 e
和enumDef
之间添加逗号:
typedef enum _enumDef{A,B,C} enumDef, e;
有没有可能将typedef包含到结构中?
根据C标准,在结构内不允许使用存储类说明符。
所以你不能在结构中有一个typedef
成员
如果您认为结构中的{}
定义了范围,它将告诉您括号内的所有内容都是该结构的本地内容,即使C语言允许您在其中放置typedef也不会增加太多。
(发明一个概念上的名称空间实现可能会提供某种structDef::enumDef
语法,但这不是C的一部分。)
如果需要在结构外部使用枚举类型,则应在结构外部进行类型定义。 您提供的第一个示例是正确的用法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.