#ifndef と #include で C ヘッダーを使用する方法を理解しようとしています。次の 2 つのヘッダー ファイルがあるとします。
ヘッダーA.h:
#ifndef HEADERA_H
#define HEADERA_H
#include "headerB.h"
typedef int MyInt;
TFoo foo;
... some other structures from headerB.h ...
#endif
headerB.h
#ifndef HEADERB_H
#define HEADERB_H
#include "headerA.h"
typedef struct foo{
MyInt x;
} TFoo;
#endif
ヘッダーA.c
#include "headerA.h"
... some code ...
headerB.c
#include "headerB.h"
... some code ...
headerB.c をコンパイルすると、
In file included from headerB.h,
from headerB.c:
headerA.h: error: unknown type name ‘MyInt’
headerB.hがコンパイルされているときにHEADERB_Hを定義し、次に、headerA.hがheaderB.hをインクルードしたい場合、#ifndef HEADERA_H
is false = インクルードをスキップするためだと思います。
ここでのベストプラクティスは何ですか? ベストプラクティスは#include
ヘッダーファイルですべてのディレクティブを実行することですが、この状況では問題のように見えます。
編集:わかりました、誤解を招いて申し訳ありません。これは、より多くのファイルを含むより大きなプロジェクトの単なる例です。