これは、これが一般的であるだけでなく、Cでは必須であるためです。
#include <something.h>
これはDelphiではめったに使用されませんが。そして、使用されるとき、それは実際にそれらを設定するために使用されます{$DEFINE}
:
{$INCLUDE 'something.inc'}
DEFINESは、1つのオブジェクト(.PAS
ファイルまたはファイルの場合があり.C
ます)のコンパイル中にのみ有効であるため、これは重要です。Delphiはこのuses
句を使用して他のユニットを含め、Cはを使用してそのinclude
ヘッダーを含めます。ヘッダーには、それC
自体が他のヘッダーを含む場合があります。質問しているパターンは、同じヘッダーが再帰的に再含まれるのを防ぐために使用されます。
マテリアルを明確にするために、Cで使用できるものとDelphiで使用できるもののサンプルを次に示します。3つのファイルを設定したとします。ここでは、とのA
両方を含める必要がB
ありC
、B
を含めるだけで済みますC
。「C」ファイルは次のようになります。
// ----------------------- A.h
#ifndef A
#define A
#include "B.h"
#include "C.h"
// Stuff that goes in A
#endif
// ------------------------ B.h
#ifndef B
#define B
#include "C.h"
// Stuff that goes in B
#endif
// ----------------------- C.h
#ifndef C
#define C
// Stuff that goes in C
#endif
の条件付き定義がないC.h
と、C.h
ファイルはに2回含まれることになりますA.h
。Delphiでのコードは次のようになります。
// --------------------- A.pas
unit A;
interface
uses B, C;
implementation
end.
// --------------------- B.pas
unit B
interface
uses C;
implementation
end.
// --------------------- C.pas
unit C
interface
implementation
end.
{$INCLUDE}
Delphi / Pascalバージョンは、この目標を達成するためにを使用しないため、「C」が「A」に2回含まれるのを防ぐ必要はありませんuses
。ステートメントを使用します。コンパイラは、B.dcu
ファイルとファイルからエクスポートされたシンボルを取得しますが、 2回C.dcu
のシンボルを含めるリスクはありません。C.dcu
Cコードでより多くのプリコンパイラ指令が表示されるその他の理由:
- プリコンパイラは、Delphiよりもはるかに強力です。DelphiコードのA
{$DEFINE}
は条件付きコンパイルのみを処理しますが、Cバリアントは条件付きコンパイルと単語置換の形式の両方に使用できます。
- forヘッダーの必須の使用は
#include
、マクロを定義するヘッダーを持つことができることを意味します。#define
または、実際の前にいくつかのステートメントを指定して構成されたヘッダーを持つことができます#include <header.h>