C コンパイラ プリプロセッサ: CPP32.EXE
CPP32.EXE は、C または C++ プログラムをリストする、32 ビット Windows ファイルを生成します。このファイルでは、すべての #include
ファイルや #define
マクロが展開されています。 通常のコンパイル時にはこのプリプロセッサを使用する必要はありませんが、リスト ファイルはデバッグに役立つ場合があります。
マクロやインクルード ファイル内のエラーがコンパイラから報告されたときは、多くの場合、インクルード ファイルやマクロ展開結果を参照できれば、エラーの内容についてより多くの情報を得ることができます。 多くのマルチパス コンパイラでは、個々のパスでこの処理が行われ、それぞれのパスの結果を調べることができます。 C++Builder コンパイラはシングルパス コンパイラであるため、ファーストパス機能を見つけるには CPP32 を使用します。
CPP32 では、処理対象のファイルごとに、現在のディレクトリ(または、-n
オプションで指定した出力ディレクトリ)内にソースと同じ名前で拡張子が .I
のファイルが作成され、結果が書き込まれます。
この出力ファイルは、ソース ファイルとそこで使用されているインクルード ファイルが 1 行ずつ記載されたテキスト ファイルです。 プリプロセッサ指令の行や、コンパイルから除外された条件付きテキスト行は、ここではすべて削除されています。 テキスト行内のマクロはすべて、展開後のテキストで置き換えられています。
デフォルトでは、生成されたテキスト行の前に、その行が元々含まれていたソース ファイルやインクルード ファイルのファイル名と行番号が、コメントとして付加されます。 -Sr
オプションを指定すると、このコメントを含まないファイルが作成されます。 その後、このファイルをコンパイラに渡すことができます(-P
コンパイラ オプションを使用すると、強制的に C++ コンパイルを行わせることができます)。
コマンドライン構文
CPP32 [<options>] <filename[s]>
コマンドライン要素
要素 | 説明 |
---|---|
|
コマンドライン オプション。 省略可能です。 |
|
処理対象のファイルを指定します。 複数のファイルを指定できます。 ファイルを少なくとも 1 つ指定する必要があります。 |
簡単なコマンドライン ヘルプを表示するには、次のように入力します:
cpp32 -h
または、次のように入力します:
cpp32 -h -
のように入力すると、すべてのコマンドライン ヘルプを表示することができます。
コマンドライン オプション
CPP32 では、BCC32 と同じオプションをすべてと、次の追加オプション -Sx
(プロプロセス出力形式の制御)を認識します。
-Sx
オプション
オプション | 説明 |
---|---|
|
プリプロセス後のファイルにコメントを保持します。 |
|
プリプロセス後のファイルに #define と #undef を保持します。 |
|
エラー時に出力ファイルを保持します。 |
|
|
|
IDL 固有の構文を受け入れます。 |
|
コメントや字下げをそのまま残すことで、出力を読みやすくします。 |
|
ファイル名と行数の統計情報を表示します。 |
マクロ プリプロセッサとしての CPP32
CPP32 はマクロ プリプロセッサとして使用することができます。 生成される .i ファイルはその後 BCC32 でコンパイルすることができます。 CPP32 でファイルがどうプリプロセスされるかを以下の簡単なプログラムで示します。
ソース ファイル: HELLOCPP.C
#define NAME "C++Builder"
#define BEGIN {
#define END }
main()
BEGIN
printf("%s\n", NAME);
END
CPP32 コマンドライン
実行:
CPP32 HELLOCPP.C
出力(出力先は HELLOCPP.I)
/* HELLOCPP.C 1: */
/* HELLOCPP.C 2: */
/* HELLOCPP.C 3: */
/* HELLOCPP.C 4: */
/* HELLOCPP.C 5: */main()
/* HELLOCPP.C 6: */{
/* HELLOCPP.C 7: */printf("%s\n", "C++Builder");
/* HELLOCPP.C 8: */}
/* HELLOCPP.C 9: */
MIDL と CPP32 の併用
MIDL(Microsoft Interface Definition Language: Microsoft インターフェイス定義言語)は RPC コンパイラです。 MIDL を C++ プリプロセッサ(CPP32.EXE)と併用するには、以下の MIDL コマンドを使用する必要があります。
MIDL -cpp_cmd {CPP32} -cpp_opt "-Sr -oCON {CPP32 options}" {MIDL options} {.idl/.acf file}
以下のオプションを指定できます。
オプション | 説明 |
---|---|
|
.IDL ファイルまたは .ACF ファイルを処理する際にどのプリプロセッサを使用するかを MIDL に指示します。 MIDL はそのプリプロセッサを呼び出して、ソース ファイル内のマクロを展開します。 |
|
使用するプリプロセッサのコマンドライン オプションを指定します。 |
|
指定されたオプションを CPP32 に渡します。 |
|
MIDL の任意のコマンドライン オプション。 |
|
MIDL で処理されるソース ファイル。 |
BCC32、CPP32、UUID
場合によっては、CPP32 が有効な UUID を受け付けないことがあります。 たとえば、以下のような有効な UUID 文の場合を考えます。
uuid(5630EAA0-CA48-1067-B320-00DD010662DB)
CPP32 は、5630EAA0
を検出したとき、それを浮動小数点数に分類し、次にそれが無効な浮動小数点数であるため、エラーを出力します。 この問題を回避するには、UUID を引用符で囲みます。 また、MIDL を CPP32 と併用する際には、-ms_ext
オプションを使用します。 回避策に従うと、UUID 文は次のようになります。
uuid("5630EAA0-CA48-1067-B320-00DD010662DB")
また、MIDL のコマンドラインは次のようになります。
MIDL -ms_ext CPP32 -cpp_opt "-Sr {CPP32 options}" {MIDL options} {.idl/.acf file}