枚举类型不可用

时间:2014-06-23 17:49:43

标签: c enums typedef c99

我遇到枚举类型的问题。我的标题中有以下内容:

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之后它似乎工作得很好......现在这很奇怪不是吗?知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

声明

enum map_type_t { /* ... */ };

创建一个名为enum map_type_t的类型。标识符map_type_t是标记,而不是类型名称。

您可以使用typedef为该类型创建别名,也可以通过名称enum map_type_t来引用它。 (问题中的typedef应该有效;我们必须查看更多代码才能知道它为什么不起作用。)

类似的规则适用于structunion类型声明。

(C ++中的规则不同。)