我正在使用gcc在eclipse中编写嵌入式C程序,无法看到如何解决某个问题。我在头文件中有一个typedef,它受一个include guard保护。由于我在多个头文件中使用此typedef,我需要将其包含在其他头文件中,但是当我尝试编译时,无论我做什么,其中一个头文件都看不到typedef并抱怨未知类型名称。
我相信这说明了问题:
标题a.h:
#ifndef _a_h
#define _a_h
typedef enum {
USBD_OK = 0,
USBD_BUSY,
USBD_FAIL,
}USBD_Status;
#endif
标题b.h:
#ifndef _b_h
#define _b_h
#include "a.h"
extern USBD_Status USB_getStatus(void);
#endif
标题c.h:
#ifndef _c_h
#define _c_h
#include "a.h"
extern USBD_Status USBD_Sync(void);
#endif
这似乎总是导致错误“未知类型名称'USBD_Status'”,因为编译的第二个无法看到typedef。从a.h中删除包含保护会导致USBD_Status被重新声明的投诉。
编辑: 我仔细检查了所有包含路径,所有包含,所有文件名和所有包含警卫 - 没有重复或拼写错误。
答案 0 :(得分:1)
可能是您有另一个使用相同标头保护名称的标头。
您可以在a.h的顶部添加一些代码来执行此操作:
#ifdef _a_h_
#error this header is already defined
#endif
通过这种方式,您可以追踪包含a.h的所有位置,并查看可能出现的奇怪现象。
如评论中所述,您的上述示例有效,因此问题必须位于其他地方......