类型定义一个枚举类型作为结构
Typedefine an enum type as structure
这里嵌入了c。
我们的一位合作伙伴向我们发送了他们正在使用的库函数的 API 原型。有一个像这样的枚举:
typedef enum{
val1 = 0,
val2 = 1,
[..]
} status;
然后将枚举类型定义为结构:
typedef struct status status_t;
这个typedef是什么意思?
有实际意义吗?
我必须像常规结构一样处理它吗?
我认为通过这种方法我可以将枚举器转换为结构并且可以访问该结构的成员,但我不确定。
任何提示将不胜感激。
B.R。
L.
在 arm-gcc、GNU c99 上
这是两种不同的类型。
结构名称在它们自己的命名空间中。所以 struct status
不同于 status
。前者是一个结构的名称,而后者是一个 typedef,它指的是一个未命名的 enum
.
分配给枚举的 typedef 名称与分配给结构的标记名称相同的事实并不意味着就编译器而言它们以任何方式关联。
考虑以下有效代码:
typedef enum
{
STATUS1 = 0,
STATUS2 = 1
} status ;
// struct tag
// |
// V
struct status
{
status status ;
// ^ ^
// | |_______
// | |
// type_name member_name
} ;
typedef struct status status_t ;
// ^
// |
// Type alias
int main()
{
// The following is valid
status_t status_structure ;
status_structure.status = STATUS1 ;
// So is this
struct status status ;
status.status = STATUS1 ;
return 0;
}
类型名称 status
不同于成员名称 status
和结构标记 status
。在给定的代码中的某处,或者可能未包含但必需的是结构 also 的单独定义,称为 status
.
在 C 中,struct 标记本身不是类型标识符,因此没有歧义 struct status
与枚举类型别名 status
不是同一类型。这不一定是个好主意,但并非无效。如果使用 C++ 编译当然会失败,因为 struct status
,status
将是类型名称,因此 会 与枚举别名冲突 status
.
这里嵌入了c。 我们的一位合作伙伴向我们发送了他们正在使用的库函数的 API 原型。有一个像这样的枚举:
typedef enum{
val1 = 0,
val2 = 1,
[..]
} status;
然后将枚举类型定义为结构:
typedef struct status status_t;
这个typedef是什么意思? 有实际意义吗? 我必须像常规结构一样处理它吗? 我认为通过这种方法我可以将枚举器转换为结构并且可以访问该结构的成员,但我不确定。 任何提示将不胜感激。 B.R。 L.
在 arm-gcc、GNU c99 上
这是两种不同的类型。
结构名称在它们自己的命名空间中。所以 struct status
不同于 status
。前者是一个结构的名称,而后者是一个 typedef,它指的是一个未命名的 enum
.
分配给枚举的 typedef 名称与分配给结构的标记名称相同的事实并不意味着就编译器而言它们以任何方式关联。
考虑以下有效代码:
typedef enum
{
STATUS1 = 0,
STATUS2 = 1
} status ;
// struct tag
// |
// V
struct status
{
status status ;
// ^ ^
// | |_______
// | |
// type_name member_name
} ;
typedef struct status status_t ;
// ^
// |
// Type alias
int main()
{
// The following is valid
status_t status_structure ;
status_structure.status = STATUS1 ;
// So is this
struct status status ;
status.status = STATUS1 ;
return 0;
}
类型名称 status
不同于成员名称 status
和结构标记 status
。在给定的代码中的某处,或者可能未包含但必需的是结构 also 的单独定义,称为 status
.
在 C 中,struct 标记本身不是类型标识符,因此没有歧义 struct status
与枚举类型别名 status
不是同一类型。这不一定是个好主意,但并非无效。如果使用 C++ 编译当然会失败,因为 struct status
,status
将是类型名称,因此 会 与枚举别名冲突 status
.