0

我正在用 gcc 在 eclipse 中编写一个嵌入式 C 程序,但看不到如何解决某个问题。我在头文件中有一个 typedef,它受包含保护。由于我在多个头文件中使用此 typedef,因此我需要将其包含在其他头文件中,但是当我尝试编译时,无论我做什么,其中一个头文件都看不到 typedef 并抱怨未知类型名称。

我相信这说明了问题:

标题啊:

#ifndef _a_h
#define _a_h

typedef enum {
  USBD_OK   = 0,
  USBD_BUSY,
  USBD_FAIL,
}USBD_Status;

#endif

标题 bh:

#ifndef _b_h
#define _b_h

#include "a.h"

extern USBD_Status USB_getStatus(void);

#endif

标题通道:

#ifndef _c_h
#define _c_h

#include "a.h"

extern USBD_Status USBD_Sync(void);

#endif

这似乎总是导致错误“未知类型名称'USBD_Status'”,因为第二个编译的任何头文件都看不到typedef。从 ah 中删除包含保护会导致抱怨 USBD_Status 正在被重新声明。

编辑:我已经仔细检查了所有包含路径、所有包含、所有文件名和所有包含保护 - 没有重复或拼写错误。

4

1 回答 1

1

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

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

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

通过这种方式,您可以追踪包含 ah 的任何地方,并查看可能出现异常的地方。

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

于 2012-11-20T18:09:15.773 回答