1.4 コンパイラの使用
1.4.2 コンパイラ
Cコンパイラの起動書式は、次のようになります。
c88 [[option]...[file]...] ...
Cコンパイラは、Cソースファイル名とコマンド行オプションをランダムな順序で受け付けます。ソースファ イルは、コマンド行に現れるのと同じ順序(左から右)で処理されます。オプションには、最初に"-"が付け られます。それぞれのCソースファイルは、別々にコンパイルされます。コンパイラは、Cソースモジュー ルごとに、接尾辞.srcの付いた出力ファイル(アセンブラソースコードが含まれる)を生成します。
オプションの優先順位は左から右になります。2つのオプションが競合する場合、最初(もっとも左)のオプ ションが有効になります。-oオプションを付けることで、デフォルト出力ファイル名を無効にすることがで きます。コンパイラは、それぞれの-oオプションを一度しか使用しないため、複数のソースファイルで複数 の-oオプションを指定することができます。
オプションの要約を以下にまとめます。次の節では、それぞれのオプションについて詳細に説明します。
コンパイラのオプション
オプション -Dmacro[=def]
-H file -Idirectory -M{s|c|d|l}
-O{0|1}
-V -e -err -f file -g -o file -s -w[num]
説 明 プリプロセッサmacroを定義します。
コンパイルの前にfileをインクルードします。
directoryでインクルードファイルを探します。
メモリモデルを選択します。それぞれ、スモール、コンパクトコー ド、コンパクトデータ、ラージに対応します。
最適化を制御します。
バージョンヘッダのみを表示します。
コンパイラエラーが発生した場合、出力ファイルを削除します。
診断をエラーリストファイル(.err)に送信します。
オプションをfileから読み込みます。
シンボリックデバッグ情報を有効にします。
出力ファイルの名前をfileで指定します。
Cソースコードをアセンブラ出力とマージします。
1つまたはすべての警告メッセージを抑制します。
コンパイラオプション(機能別)
説 明 インクルードオプション
オプションをfileから読み込みます。
コンパイルの前にfileをインクルードします。
directoryでインクルードファイルを探します。
前処理オプション
プリプロセッサmacroを定義します。
コード生成オプション
それぞれ、スモール、コンパクトコード、コンパクトデータ、ラー ジに対応します。
最適化を制御します。
出力ファイルオプション
コンパイラエラーが発生した場合、出力ファイルを削除します。
出力ファイルの名前をfileで指定します。
Cソースコードをアセンブラ出力とマージします。
診断オプション
バージョンヘッダのみを表示します。
診断をエラーリストファイル(.err)に送信します。
シンボリックデバッグ情報を有効にします。
1つまたはすべての警告メッセージを抑制します。
オプション -f file
-H file -Idirectory -Dmacro[=def]
-M{s|c|d|l}
-O{0|1}
-e -o file -s -V -err -g -w[num]
1.4.2.1 コンパイラオプションの詳細な説明
以下に、オプションの文字をリストしています。それぞれのオプション(-oを除く、-oオプションの説明を 参照)は、すべてのソースファイルに適用されます。同じオプションが複数回使用された場合、最初に登場 したオプション(もっとも左)が使用されます。コマンド行オプションの配置は、-Iオプションと-oオプショ ンを除いて重要になります。-oオプションの場合、ファイル名は、オプションのすぐ後に続けることができ ません。間にタブまたはスペースを入れる必要があります。他のオプション引数は、オプションの直後に 続ける必要があります。ソースファイルは、コマンド行に現れるのと同じ順序(左から右)で処理されます。
一部のオプションには、対応するプラグマがあります。
-D
オプション:
-Dmacro[=def]
引数:
定義したいマクロおよびその定義(オプション)。 説明:
macroには、#defineと同じようにプリプロセッサを定義します。defが指定されていない場合("="がない
場合)、"1"が指定されていると見なされます。シンボルはいくつでも定義できます。定義は、条件コン パイルで、#if、#ifdef、#ifndefを持つプリプロセッサによりテストすることができます。コマンド行が、
使用しているオペレーティングシステムの制限より長くなる場合、-fオプションが必要になります。
なお、ANSIでは、以下のシンボルが定義済みです。
̲̲FILE̲̲ "現在のソースファイル"
̲̲LINE̲̲ 現在のソース行番号(int型)
̲̲TIME̲̲ "hh:mm:ss"
̲̲DATE̲̲ "Mmm dd yyyy"
̲̲STDC̲̲ ANSI標準のレベル。このマクロは常に0となります。
また、c88を起動すると、以下のシンボルが生成されます。
̲C88 このコンパイラを示す、定義済みのシンボル。このシンボルは、c88コンパイラのみが認 識するソースの部分にフラグを立てるときに使用することができます。コンパイラのバー ジョン番号が追加されます。
̲MODEL コンパイルするモジュールのメモリモデルを示します。プリプロセッサがテストできる 1文字または2文字(内部RAMバンク0の場合"0"、内部RAMバンク1の場合"1")が追加され ます。詳細については、"1.2.2.2 メモリモデル"を参照してください。
例:
次のコマンドは、シンボルNORAMを1と定義し、シンボルPIを3.1416と定義します。
c88 -DNORM -DPI=3.1416 test.c
-e
オプション:
-e 説明:
コンパイラエラーが発生した場合、出力ファイルを削除します。このオプションを使用すると、make ユーティリティが常に正しく動作するようになります。
例:
c88 -e test.c
-err
オプション:
-err 説明:
エラーをstderrの代わりにファイルsource.errに書き込みます。
例:
エラーをstderrの代わりにtest.errに書き込む場合、次のコマンドを実行します。
c88 -err test.c
-f
オプション:
-f file 引数:
コマンド行処理に使用するファイル名。標準入力を示すときは、ファイル名"-"を使用できます。
説明:
コマンド行処理のためにfileを使用します。コマンド行のサイズ制限を回避するために、コマンドファイ ルを使用することができます。これらのコマンドファイルに入れるオプションは、実際のコマンド行では 使用できないものです。コマンドファイルは、makeユーティリティなどを使用して簡単に作成できます。
-fオプションは複数使用することができます。
コマンドファイルには、次のような簡単な規則があります。
1. コマンドファイルの同じ行に複数の引数を指定することができます。
2. 引数にスペースを入れるときは、その引数を一重引用符または二重引用符で囲みます。
3. 引用符の付いた引数の中で一重引用符または二重引用符を使用する場合、次の規則に従います。
a. 中に入っている引用符が、一重引用符のみまたは二重引用符のみの場合、引数を囲むときもう一 方の引用符を使用します。つまり、引数に二重引用符が含まれる場合、引数を一重引用符で囲み ます。
b. 両方の引用符が使用されている場合、それぞれの引用符がもう一方の引用符で囲まれるような形 で、引数を分割する必要があります。
例:
"This has a single quote ' embedded"
または
'This has a double quote " embedded' または
'This has a double quote " and a single quote '"' embedded"
4. オペレーティングシステムによっては、テキストファイル内の行の長さに制限がある場合がありま す。この制限を回避するため、継続行を使用することができます。これらの行は、最後にバックス ラッシュと改行が付きます。引用符の付いた引数の場合、継続行は、次の行のスペースを取らない でそのままつなげられます。引用符が付いていない引数の場合、次の行にあるすべてのスペースは 削除されます。
例:
"This is a continuation ¥ line"
→ "This is a continuation line"
control(file1(mode,type),¥
file2(type))
→ control(file1(mode,type),file2(type)) 5. コマンド行ファイルは、最高で25レベルまでネストすることができます。
例:
ファイルmycmdsに次の行があると仮定します。
-err test.c
コマンド行は、次のようになります。
c88 -f mycmds
-g
オプション:
-g 説明:
出力ファイルに指示文を追加し、シンボリック情報を組み込んで、高レベルデバッグを可能にします。
コンパイラが高レベルの最適化に設定されている場合、デバッグに手間がかかるようになることもあり ます。
例:
シンボリックデバッグ情報を出力ファイルに追加するときは、次のコマンドを実行します。
c88 -g test.c 参照:
-O
-H
オプション:
-Hfile 引数:
インクルードファイルの名前。
説明:
Cソースのコンパイルの前にfileをインクルードします。これは、Cソースの最初の行で#include "file"を 指定するのと同じです。
例:
c88 -Hstdio.h test.c 参 照 :
-I
-I
オプション:
-Idirectory 引数:
インクルードファイルを探すディレクトリの名前。
説明:
名前に絶対パス名がない#includeファイルを検索するときのアルゴリズムを変更し、directoryを探しま す。そのため、#includeファイルの名前が""で囲まれている場合は、#include行を含むファイルのディレ クトリが最初に探され、次に-Iオプションで指定されているディレクトリが左から右の順に探されま す。それでもインクルードファイルが見つからない場合、コンパイラは、環境変数C88INCで指定され ているディレクトリを探します。C88INCには、複数のディレクトリが含まれる可能性があります。