将头文件中的 typedef 枚举包含在另一个头文件中
Posted
技术标签:
【中文标题】将头文件中的 typedef 枚举包含在另一个头文件中【英文标题】:Including typedef enum from header file in another header file 【发布时间】:2020-03-20 17:03:51 【问题描述】:在尝试将一个头文件中的枚举包含在 antoher 中时,我一直遇到问题。 我工作的环境是使用 IAR Embedded Workbench 的嵌入式 C。
我有一个名为“enums.h”的专用枚举类型的头文件
#ifndef ENUMS_H_
#define ENUMS_H_
typedef enum
SET,
SCHEDULE,
EXECUTE
action_type_t;
#endif
还有一个名为“parser.h”的解析器的头文件
#ifndef PARSER_H_
#define PARSER_H_
#include "enums.h"
#include <stdint.h>
typedef struct
action_type_t action;
uint16_t nbytes;
Message;
#endif
在 parser.c 中,我将标题包含为
#include "parser.h"
当我编译它时,我收到错误“标识符 action_type_t 未定义”
我在这里做错了什么?在这一点上我很难过。
谢谢
【问题讨论】:
在enum
定义中的每个成员之后都需要;
。
【参考方案1】:
您的enum
定义缺少逗号,您的parser.h
使用uint16_t
而未能包含<stdint.h>
,而且更迂腐的是,您的include 保护宏正在侵占保留的命名空间,因为它以@ 开头987654325@ 和一个大写字母。
这应该可行:
enums.h:
#ifndef ENUMS_H_
#define ENUMS_H_
typedef enum
SET,
SCHEDULE,
EXECUTE, /*the last comma is optional*/
action_type_t;
#endif
parser.h:
#ifndef PARSER_H_
#define PARSER_H_
#include "enums.h"
#include <stdint.h>
typedef struct
action_type_t action;
uint16_t nbytes;
Message;
#endif
【讨论】:
我相信_t
名称也是保留的,至少在 POSIX 中是这样。在 ISO C 下,我认为它更复杂,但完全避免它们可能是明智之举。
最后一个成员之后的逗号,即枚举中的 EXECUTE 真的需要吗?我试过不用逗号。它工作正常。
@MuraliKrishnaBellamkonda 最后一个是可选的。
谢谢。实际的源代码在枚举中有逗号,但是在复制文本时它们以某种方式被删除了。我尝试删除#define 中的第一个下划线,并尝试将我的 typedef 重命名为末尾没有“_t”的内容,但无济于事......【参考方案2】:
感谢所有回答的人,我想我会回来关闭这个。 原来我的项目中包含一个同名但为空的头文件...
下次我最好先看看自己的后院,然后再问别人。
但是 PSkocik 确实提供了一个工作示例,并且他的代码对于任何偶然进入该线程的人来说都是完美的编译!
【讨论】:
以上是关于将头文件中的 typedef 枚举包含在另一个头文件中的主要内容,如果未能解决你的问题,请参考以下文章