我遇到枚举类型的问题。我的标题中有以下内容:
enum map_type_t{
MAP_TYPE_PORT,
MAP_TYPE_VLAN,
MAP_TYPE_L2MAC,
MAC_TYPE_VPWS,
MAC_TYPE_BFD,
MAC_TYPE_VPLS
};
我在我的C
文件中包含了标题,而且我的原型有int store_to_flash (map_type_t map_type, void* pData)
,但现在由于某种原因,map_type_t
类型未被识别,为什么不呢?我在想?我也尝试过键入这个enum但是也无法使用它,看起来像:
typedef enum {
MAP_TYPE_PORT,
MAP_TYPE_VLAN,
MAP_TYPE_L2MAC,
MAC_TYPE_VPWS,
MAC_TYPE_BFD,
MAC_TYPE_VPLS
}map_type_t;
问题是什么,我不明白。
PS:这是diab
模式下的C99
编译器
编辑1
有趣的是,如果我搬家
typedef enum map_type_e {
MAP_TYPE_PORT,
MAP_TYPE_VLAN,
MAP_TYPE_L2MAC,
MAC_TYPE_VPWS,
MAC_TYPE_BFD,
MAC_TYPE_VPLS
}map_type_t;
从我的标题到最顶层的C文件,在我的include
之后它似乎工作得很好......现在这很奇怪不是吗?知道为什么会这样吗?
答案 0 :(得分:2)
声明
enum map_type_t { /* ... */ };
创建一个名为enum map_type_t
的类型。标识符map_type_t
是标记,而不是类型名称。
您可以使用typedef
为该类型创建别名,也可以通过名称enum map_type_t
来引用它。 (问题中的typedef
应该有效;我们必须查看更多代码才能知道它为什么不起作用。)
类似的规则适用于struct
和union
类型声明。
(C ++中的规则不同。)