• 検索結果がありません。

1.4 コンパイラの使用

1.4.4  プラグマ

-o

オプション:

-o file 引数:

出力ファイルの名前。ファイル名はオプションの直後に続けられません。オプションの後にタブまたは スペースを入れる必要があります。

デフォルト:

.src接尾辞を持つモジュール名。

説明:

.src接尾辞を持つモジュール名の代わりに、fileを出力ファイル名として使用します。最初に見つ かった-oオプションが最初にコンパイルするファイルに適用され、2番目の-oオプションが2番目のコ ンパイルファイルに適用されるという具合になるため、このオプションを使用するときは、特に注意 が必要です。

例:

次のコマンドが指定された場合、

c88 file1.c file2.c -o file3.src -o file2.src

file1.cがコンパイルされてfile3.srcが作成され、file2.cがコンパイルされてfile2.srcが作成 されて、2つのファイルが作成されます。

-s

オプション:

-s プラグマ:

source 説明:

Cソースコードを、生成されたアセンブラコードとマージして、ファイルに出力します。

例:

c88 -s test.c

; test.c:

; 1 |int i;

; 2 |

; 3 |int

; 4 |main( void )

; 5 |{

extern __START global _main 参照:

-w

オプション:

-w[num]

引数:

オプションで、抑制する警告番号。

説明:

-wを使用すると、すべての警告メッセージが抑制されます。-wnumを使用すると、指定された警告メッ セージが抑制されます。

例:

警告135を抑制するときは、次のコマンドを実行します。

c88 file1.c -w135

1.4.3 インクルードファイル

インクルードファイルは、<>で囲む方法と""で囲む方法の2つの方法で指定することができます。#include指 示文がある場合、c88は次のアルゴリズムを使用して、インクルードファイルをオープンしようとします。

1. ファイル名が""で囲まれていて、そのファイル名が絶対パス名でない("¥"が最初に付かない)場合、イン クルードファイルは、#include行を含むファイルがあるディレクトリで検索されます。例を示します。

c88 ..¥..¥source¥test.c

c88は、最初にディレクトリ..¥..¥sourceでインクルードファイルを探します。

このファイル(c88 test.c)があるディレクトリでソースファイルをコンパイルする場合、コンパイラは、

インクルードファイルをカレントディレクトリで探します。

ただし、この最初の手順は、<>で囲まれたインクルードファイルでは実行されません。

2. -Iオプションで指定されたディレクトリを、左から右の順序で使用します。例を示します。

c88 -I..¥..¥include demo.c

3. 環境変数C88INCがあるかどうかチェックします。この環境変数がある場合、その内容を、インクルー ドファイルのディレクトリ指定子として使用します。環境変数C88INCでは、区切り文字を使用して複 数のディレクトリを指定することができます。上記の例で-Iオプションを使用する代わりに、次のよう にC88INCを使用して、同じディレクトリを指定することができます。

set C88INC=..¥..¥include c88 demo.c

4. 上記の方法で探してもインクルードファイルが見つからない場合、コンパイラはサブディレクトリ include(c88バイナリが含まれるディレクトリの1つ上のディレクトリ)を探します。例を示します。

c88.exeがディレクトリC:¥C88¥BINにインストールされている場合、インクルードファイルが検索 されるディレクトリは、C:¥C88¥INCLUDEになります。

コンパイラは、このincludeディレクトリを探すため、実行時にバイナリがどのディレクトリから実行 されているかを判断します。

c88は、必要な場合、ディレクトリ区切り文字を適宜挿入するため、-IオプションまたはC88INCで指定され ているディレクトリ名の最後には、この区切り文字を付けても付けなくてもかまいません。

環境変数C88INCで複数のディレクトリを指定する場合、次の区切り文字を使用する必要があります。

; , スペース

例: set C88INC=..¥..¥include;¥proj¥include

1.4.4 プラグマ

ANSI(3.8.6)によると、次の形式で記述された前処理の指示文がある場合、

#pragma pragma-token-list new-line

コンパイラは、インプリメンテーションで定義されている方法で動作します。コンパイラは、以下のリス トにないプラグマについては無視します。プラグマは、コンパイラのコードジェネレータに指示を与えま す。プラグマの他に、コード生成プロセスを進行させる方法として、Cアプリケーションで使用するコマン ド行オプションとキーワード(たとえば_near型変数)があります。コンパイラは、次の規則を使用して、

これらの3つのグループを認識します。

コマンド行オプションより、キーワードとプラグマが優先されます。キーワードより、プラグマが優先さ れます。つまりプラグマの優先度がもっとも高いということになります。

このアプローチを利用すると、ソースモジュールのデフォルト最適化レベルを設定して、ソース内でプラ グマにより一時的に無効とすることもできます。

Cコンパイラc88は、次のプラグマをサポートしています。

asm その次の行(プリプロセッサ行以外)をアセンブラ言語ソースコードとして出力ファイルに挿 入します。挿入された行については、構文がチェックされません。また、ピープホールオプ ティマイザのコードバッファがフラッシュされます。そのため、コンパイラはピープホール パターン置換のような最適化を停止して、endasmプラグマの後、関数の最初で開始するかの ようにこれらの最適化を再開します。高度なアセンブラインラインについては、組み込み関 数を使用することができます。定義された組み込み関数のセットは、S1C88特有の機能のほ とんどをカバーしており、それ以外の方法ではC言語でアクセスすることはできません。組 み込み関数の詳細については、"1.2.16 組み込み関数"を参照してください。

asm_noflush プラグマasmとほとんど同じですが、ピープホールオプティマイザがコードバッファをフラッ

シュせず、レジスタの内容を有効と見なす点が異なります。

endasm C言語に戻します。"1.2.14 アセンブラの記述"で詳細に説明しています。

source -sオプションと同じです。Cソースとアセンブラソースを混在できるようにします。

nosource デフォルト。アセンブラコード内のCソースの生成をオフにします。