c - #include和多个typedef

时间:2012-11-20 17:38:44

标签: c gcc typedef header-files include-guards

我正在使用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被重新声明的投诉。

编辑: 我仔细检查了所有包含路径,所有包含,所有文件名和所有包含警卫 - 没有重复或拼写错误。

1 个答案:

答案 0 :(得分:1)

可能是您有另一个使用相同标头保护名称的标头。

您可以在a.h的顶部添加一些代码来执行此操作:

#ifdef _a_h_
#error this header is already defined
#endif

通过这种方式,您可以追踪包含a.h的所有位置,并查看可能出现的奇怪现象。

如评论中所述,您的上述示例有效,因此问题必须位于其他地方......