0

gcc を使用して Eclipse で組み込み C プログラムを作成していますが、特定の問題を回避する方法がわかりません。インクルード ガードで保護されているヘッダー ファイルに typedef があります。この typedef を複数のヘッダーで使用しているため、他のヘッダーに含める必要がありますが、コンパイルしようとすると、何をしても、ヘッダーの 1 つが 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

これは、2 番目にコンパイルされたヘッダーが typedef を認識できないため、常に「unknown type name 'USBD_Status'」というエラーが発生するようです。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 に答える