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 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 ?
谢谢
我会回答这个问题
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
是类型,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;
让我们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 标签(e
和 enumDef
)之间是否没有逗号,这就是它产生问题的原因!!
为了使其正常工作,只需在结构 enum _enumDef {...}
的 相同的两个标签 e
和 enumDef
之间添加逗号:
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。你给出的第一个例子是正确的用法。
我有一个关于组合 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 ? 谢谢
我会回答这个问题
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
是类型,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;
让我们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 标签(e
和 enumDef
)之间是否没有逗号,这就是它产生问题的原因!!
为了使其正常工作,只需在结构 enum _enumDef {...}
的 相同的两个标签 e
和 enumDef
之间添加逗号:
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。你给出的第一个例子是正确的用法。