c - 枚举类型不可用

标签 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 文件中包含了 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 应该有效;我们必须查看更多代码才能知道为什么它对您不起作用。)

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

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

关于c - 枚举类型不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372199/

相关文章:

c - 将 -1 返回给用户定义的函数会导致程序终止,退出代码为 0

c - 如何在 C 中使用静态断言来检查传递给宏的参数类型

javascript - 由于 undefined variable ,JSLint 文件失败

c - C 中的同义词 `typedef` 是否可以互换?

c++ - typedef 如何与模板一起使用?

c - 查找重复项的最快方法

c++ - LLVM 中间表示 : fptoui vs. fptosi

在界面中使用枚举的 typescript

rust - 如何在忽略判别式的情况下找到枚举的大小?

c++ - C++11如何判断一个类是否指定了嵌套类定义或typedef?