我在使用枚举类型时遇到问题。我的标题中有以下内容:
enum map_type_t{
MAP_TYPE_PORT,
MAP_TYPE_VLAN,
MAP_TYPE_L2MAC,
MAC_TYPE_VPWS,
MAC_TYPE_BFD,
MAC_TYPE_VPLS
};
我在我的 C
文件中包含了 header ,这就是我的原型(prototype),例如 int store_to_flash (map_type_t map_type, void* pData)
但是现在,出于某种原因,类型 map_type_t
没有被识别,我为什么不知道?我也尝试过对枚举进行 typedef,但也无法正常工作,它看起来像:
typedef enum {
MAP_TYPE_PORT,
MAP_TYPE_VLAN,
MAP_TYPE_L2MAC,
MAC_TYPE_VPWS,
MAC_TYPE_BFD,
MAC_TYPE_VPLS
}map_type_t;
什么问题,没看懂
PS:这是在 C99
模式下使用 diab
编译器
编辑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
之后它似乎工作得很好......现在这很奇怪不是吗?知道为什么会这样吗?
最佳答案
声明
enum map_type_t { /* ... */ };
创建一个名为 enum map_type_t
的类型。标识符 map_type_t
是一个标签,而不是类型名称。
您可以使用 typedef
为类型创建别名,也可以通过名称 enum map_type_t
引用它。 (您问题中的 typedef
应该有效;我们必须查看更多代码才能知道为什么它对您不起作用。)
类似的规则适用于 struct
和 union
类型声明。
(C++ 中的规则不同。)
关于c - 枚举类型不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372199/