前ページへプログラムの作成 コンパイラへの指令次ページへ

第 6 章 コンパイラの使用

この章では次の内容を説明します。

6.1 はじめに

『プログラムの作成』の章で説明されているように、Server Express コンパイラによるプログラムのコンパイルは 2 段階で行われますす。

コンパイラにどのフェーズを実行させるか (構文チェックフェーズ、生成フェーズ、あるいはその両方) を指定するには、Cob ユーティリティを使用します。

オブジェクトコードファイルは、直接オペレーティングシステムを呼び出すことはなく、コンピュータ上の装置にアクセスすることもありません。 そのかわり、これらのファイルは、ランタイムシステム、またはランタイムサポートモジュールを呼び出して、そこからオペレーティングシステムを呼び、ファイルの開閉や、コンピュータ上のハードウェア装置へのアクセスなど、細かい操作を実行します。 呼び出し可能な共有オブジェクト、共有ライブラリ、またはシステムの実行可能ファイルを作成するには、オブジェクトコードファイルをリンクする必要があります。

呼び出し可能な共有オブジェクトファイル、.int ファイル、および .gnt ファイルは、システムの実行可能ファイルにリンクせずに実行できる実行可能ファイルです。

実行可能ファイルのタイプに関する詳細は、『アプリケーションのパッケージ化』の章で説明しています。 異なるタイプの実行可能ファイルを作成するプロセスは、『プログラムの作成』の章で説明しています。

コンパイラ指令を指定すると、プログラムのコンパイル方法を制御できます。 たとえば、コンパイラ指令を使用して、プリンタ同様に画面にも全リストを表示するよう指示することができます。

6.2 コンパイラの起動

プログラムをコンパイルするには、Cob ユーティリティを使用します。 Cob ユーティリティの操作は、cob コマンドで制御します。このコマンドには様々なフラグを指定することができます。 cob コマンドについては、『COBOL システムインターフェイス (Cob)』の章で説明しています。 cob のフラグについては、『cob のフラグの説明』の章で説明しています。 64 ビットモードで使用している場合は、『32 ビットモードおよび 64 ビットモードでの作業』の章も参照してください。

コンパイラ指令は、cob のコマンド行で指定します。

ソースコードファイルは通常、拡張子が .cbl.CBL、または .cob のファイルです。

コンパイル、または生成の過程で出力されるメッセージやエラーをすべて表示するには、cob のコマンド行で詳細オプション (-v フラグを使用する) を指定します。 詳細オプションを指定しない場合は、エラーが見つからない限り、メッセージが表示されずに構文チェックフェーズ、または生成フェーズが処理されます。

詳細オプションを指定した場合は、コンパイラが行ごとにフラグを認識し、各フラグを受け取ったり、拒否したり、あるいは無視します。 無視されるのは、ご使用の環境に該当しないか、構文チェック、または生成フェーズには適用されないフラグです。 すべてのフラグが認識されると、コンパイラはファイルを開き、コンパイルプロセスを開始します。

プログラムの構文チェック、または生成の間、環境変数、 TMPDIR で指定されたディレクトリに、多くの一時作業ファイルがコンパイラによって作成されます。TMPDIR が存在しない場合は、これらの一時ファイルが /tmp または /usr/tmp ディレクトリに作成されます。(TMPDIR に関する詳細は、付録 『環境変数』 を参照してください)。 作成されるファイルのサイズは cob コマンドに指定された終了点、プログラムの内容、および指定された指令によって異なりますが、特にデータと手続き名の数に影響されます。コンパイルを開始する前に、一時領域に十分な空き容量を確保してください。 通常の場合、システムの実行可能ファイルのビルド時に、多くの空き領域が必要となります。

一時ファイルは通常、コンパイラが終了するまでに削除されますが、コンパイラに割り込みが入った場合や、マシンの故障により、強制終了された場合は、クリアルーチンが完了しません。このような場合には、一時ファイルがディスク上に残ってしまうことがあります。 これらの一時ファイルは、check.vnn のような形式をしています。Cob が他のセッションで動作していない場合は、これらのファイルを削除できます。

6.3 構文チェックフェーズ

コンパイラは、cob コマンドに終了点が指定されていない場合は、デフォルトで COBOL ソースコードファイルを .int ファイルにコンパイルし、Animator 用の情報が含まれる .idy ファイルも作成します。

複数のプログラムが含まれるソースファイルをコンパイルすると、最初のプログラムの結果の出力ファイル名は source-file.int (および source-file.idy) になり、以降に続くプログラムの出力ファイル名は、program-id.int (および program-id.idy) になります。 たとえば、ab および bc という 2 つのプログラムが含まれたソースファイル file1 をコンパイルした場合、ab の結果は file1.int に、bc の結果は bc.int に出力されます。

詳細モードが指定された場合は、構文チェックフェーズが開始されると、コンパイラは次の内容を表示します。

* filename のコンパイル中

この後に、他のコンパイラメッセージが続きます。

コンパイラがソースファイルを開けない場合、次のメッセージが出力されます。

Open fail : filename

この場合、コンパイルは中止され、制御が UNIX に戻ります。 この時点でのエラーの主な原因として、次のことが考えられます。

コンパイラがソースコード内に構文エラーを検出した場合、エラーが含まれる行と、それぞれの問題を簡単に説明するエラーメッセージが列挙されます。 エラー、およびエラーメッセージに関する詳細は、『エラーメッセージ』を参照してください。

ソースコードに構文エラーがない場合は、コンパイルが終了すると、システムから再びプロンプトが表示されます。 cob に -v フラグを設定すると、コンパイラは最初にデータサイズ、およびコードサイズの情報を表示します。

6.3.1 リスト形式

コンパイルの前に、コンパイル一覧表示オプション (cob の -P フラグ) を設定すると、コンパイルプロセスが終了した際に、コンパイルしたプログラムの情報が書き込まれたリストファイルが表示されます。 詳細リストに含まれる情報を次に例示します。

* Micro Focus Server Express VX.x revision xxx          15-Apr-99 16.49 Page 1
*             filename
Options: list-of-directives

    1   Statement 1
    :
    :
    n   Statement n

* Micro Focus Server Express revision xxx  Compiler
* Copyright (C) 1984-2000 Micro Focus Intl URN xxxxx/xxn/nnnnnx
                                            REF xxx-nnnnnnnnnxx
* Last message on page:  nn
*
* Total messages:   n
* Unrecoverable:    n   Severe:     n
* Errors:   n   Warnings:   n
* Informational:    n   Flags:      n
* Data = nnnnnnnnn   Code = nnnnnnnnn

最初の行には、製品名とバージョン番号、および リストが作成された日時が表示されます。 コンパイルしたプログラムのファイル名が 2 行目に表示されます。 FLAG コンパイラ指令が設定されている場合は、2 行目にこの指令の設定も表示されます。 この 2 行は一覧ファイルの各ページの先頭に表示されます。 指定された指令の一覧は、次の行に表示されます。

コンパイル時に REF 指令を指定した場合、データ名や手続き文のアドレスを示す 16 進の値が、ページの右に表示されます。 データ名のアドレスは、データ領域の始まりを示し、プロシージャのアドレス (項、および段落) は、コード領域の始まりを示します。 データ領域の始まり、および、手続き領域の始まりには、各 SELECT 文で使用される、数バイトの初期化コードを含むいくらかのオーバヘッドがあります。

リストの本体部分には、ソースコードとともに、フラグや構文エラーに関する詳細が表示されます。

フラグは、フラグが立てられた行ごとに、次の形式でリストに表示されます。

nn              flagged-feature
**--nnn--dialect--------------------(nnnn)---
**  description

変数の内容は次の通りです。

nn フラグが立てられた行の連続番号
flagged-feature フラグが立てられる原因となったコード
nnn フラグ番号
dialect フラグが立てられた構文の言語レベルを示します。 FLAG 指令に関する詳細は、『コンパイラへの指令』 の章を参照してください。
nnnn 前のフラグが発生した、リスト上のページを示します。 これを使用して、1 つのフラグから、前のフラグをトレースできます。
description その機能にフラグが立てられた理由を示します。

フラグが立っているプログラムも実行することができます。詳細は、『エラーメッセージ』で説明しています。

データ宣言でエラーが検出された場合は、コンパイラが、それに続くデータ宣言をいくつかスキップすることがあります。そのため、宣言がスキップされたデータ項目が参照されると、不要なエラーメッセージが生成されます。

構文エラーは、エラー行ごとに次の形式でリストに表示されます。

nn      illegal-statement
*     nnn *A *** ******************* (nnnn**) 
**  description

変数の内容は次の通りです。

nn 誤りのある行の連続番号
illegal-statement エラーの原因となったコード
nnn コンパイラのエラー番号
A エラーの重大度を表す、次のいずれかのアルファベット 1 文字。

U 回復不能
S 重大
E エラー
W 警告
I 参考

環境によっては、誤りのある行をコンパイラが端末にエコーできない場合があります。疑わしい場合は、前の行を確認してみてください。詳細は、次の『コンパイラのエラーメッセージ』の項を参照してください。

nnnn 前のエラーが発生した、リスト上のページを示します。 これを使用して、1 つのエラーから、前のエラーをトレースできます。
description 構文がエラーになった理由を示します。

リストの最後に概要が表示されます。リストの概要の 1 行目にも、製品名とバージョン番号、および構成要素名が表示されます。著作権情報、ユーザのリファレンス番号、およびコンパイラのリファレンス番号がその次の 2 行に表示されます。

エラー、またはメッセージが出力された場合は、最後のメッセージが表示されているリストのページ番号に続いて、メッセージの総数、重大度別のメッセージ数、および、立てられたフラグの数が表示されます。

エラーもメッセージも出力されなかった場合は、次の行が表示されます。

* 合計メッセージ : 0

最後の行には、データサイズ、およびコードサイズの情報が次の形式で表示されます。

データ=nnnnnnnnn コード=mmmmmmmmm

変数の内容は次の通りです。

nnnnnnnnn リテラル定数を含む ( 64 KB より小さいデータの場合) データ部のサイズ (バイト)
mmmmmmmmm コンパイルした中間コードのサイズ

6.3.2 コンパイラのエラーメッセージ

コンパイラから出力されたエラーメッセージは、重大度別に次のように分類されます。

重大度
説明
回復不能 (U) 致命的なエラーを示します。
重大 (S) コンパイラで解決できないエラーを示します。コンパイルは続行されますが、誤りのある文はコンパイルされません。
エラー (E) コンパイラで修正を試みたエラーを示します。
警告 (W) 構文的には正しいが、エラーの可能性がある文にフラグを立てます。
備考 (I) ソースコード内で確認の必要がある要注意部分を示します。

コンパイラは、オペレーティングシステムに値を返し、発行されたメッセージのうち、最も重大度が高いメッセージが表示されます。 表示される重大度、およびそれに対応する戻り値を次の表に示します。

重大度
戻り値
回復不能 (U) 16
重大 (S) 12
エラー (E) 8
警告 (W) 4
備考 (I) INFORETURN 指令を参照
メッセージなし 0

U レベル、および S レベルのエラーは常に出力されます。 その他の 3 つのレベルのエラーは、WARNING コンパイラ指令を設定すると出力されます。 詳細は、『コンパイラへの指令』の章を参照してください。 回復不能エラーがあるとコンパイラは停止し、停止の原因となったエラーに関するエラーメッセージが出力されます。 重大エラーが検出されると、デフォルトでは、中間コードファイルが生成された後、cob コマンドの処理が停止します。このデフォルトの設定は、コマンド行で cob に -W フラグを使用して変更することができます。 このフラグは、cob の処理を停止するエラーレベルを制御します。 詳細は、『cob のフラグの説明』の章を参照してください。

コンパイラで S、E、W、または I レベルのエラーが出力された場合、コンパイル終了時に出力されるメッセージに、発生したエラーの数、および各エラーのカテゴリが示されます。

U レベルのエラーがある中間コードプログラムを、実行、または生成することはできません。 まず、これらのエラーを修正してから、cob コマンドを使ってもう一度ソースコードをコンパイルしてください。

S レベルのエラーがあるプログラムは、E ランタイムスイッチを有効にした場合にのみ実行することができます。このスイッチの設定方法に関する全詳細は、『ランタイムスイッチの詳細』の章を参照してください。 E ランタイムスイッチが無効 (-E) の場合(デフォルトの設定)に、 S レベルのエラーがある中間コードプログラムを実行しようとすると、実行時エラーが発生し、プログラムの実行が終了します。

S レベルのエラーがある中間コードプログラムから、生成コード、またはオブジェクトコードを生成することはできません。生成しようとすると、生成 フェーズでコンパイラエラーになります。

S レベルのエラーがあるプログラムでも、E ランタイムスイッチの設定に関係なく、アニメートすることができます。-E スイッチを設定してこのようなプログラムを アニメートすると、実行時エラーが報告されますが、アニメーションは続行されます。

E レベル、W レベル、および I レベルのエラーがある中間コードファイルは、アニメート、および実行することができます。また、これらのレベルのエラーがある中間コードファイルから、オブジェクトファイルを生成することもできます。

『エラーメッセージ』 マニュアルに、コンパイラの全エラーメッセージとエラー回復のヒントの一覧があります。

6.3.3 コンパイラ出力のリダイレクション

コンパイラからの画面への出力はすべて、標準の UNIX リダイレクション、およびパイプ機能を使用してファイルにリダイレクトできます。たとえば、2 つのプログラム、myprog および subprog を連続してコンパイルし、コンパイラからの出力すべてを 1 つのファイル、 compout.log にまとめるには、次のように入力します。

cob myprog.cbl -C ans85 | tee compout.log

これで myprog からの出力を格納するリダイレクションファイルが作成されます。次に、以下を入力します。

cob subprog.cbl -C ans85 | tee -a compout.log

このリダイレクションファイルに subprog からの出力が追加されます。

ERRQ 指令を設定してコンパイルを実行すると、通常は表示される、コンパイラからのプロンプトもリダイレクトされます。そのため、実際にユーザからの応答を待っている場合は、コンパイラがハングしたように見えます。 このような場合は割り込みキーを使用してコンパイルを停止し、ERRQ 指令を設定しないでコンパイルを再度実行します。

6.4 生成フェーズ

すべての cob オプションが認識されると、コンパイラはファイルを開き、生成フェーズを開始します。 このとき、詳細オプションが設定されていると、コンパイラから次のメッセージが表示されます。

* Generating filename

コンパイラがソースファイルを開けない場合は、次のメッセージが出力されます。

* File open failure: filename

生成フェーズは中止され、制御が UNIX に戻ります。 エラーの主な原因として、次のことが考えられます。

生成プロセスが終了すると、エラーが発生しなかった場合はシステムプロンプトが再び表示されます。 cob に -v フラグを設定すると、コンパイラは最初に、データサイズ、およびコードサイズの情報を表示します。

コマンド行で -C anim または -g オプションを設定して、生成されたファイルをデバッグできるように指定することができます。 これを設定すると、Animator で必要とされる情報ファイルが作成されます。

6.5 指令

指令は、コンパイラの動作、コンパイラの出力、実際にコンパイルするコード、およびコンパイルしたコードを実行したときの動作などに影響するオプションを指定するのに使用します。 すべての指令は、コンパイラに設定されているデフォルトの設定があります。『指令の設定』の項で説明しているように、これらのデフォルト値は変更することができます。

次の項では、指令の指定方法について説明します。 個々の指令に関する詳細は、『コンパイラへの指令』の章で説明しています。

6.5.1 指令の構文

コンパイラ指令は、cob のフラグを使って指定します。 構文チェックフェーズに影響する指令は、cob の -C フラグを使って設定します。生成フェーズに影響がある指令は、cob の -N フラグを使って設定します。

指令設定のフォーマットは次の通りです。

-flag [no]keyword["parameter"]

パラメータの内容は次の通りです。

flag 指令を指定するために使用する、cob コマンド行のフラグ。 構文チェックフェーズ用の指令の flag は C、 生成フェーズ指令のフラグは N です。
no keyword を打ち消します。 nokeyword の前に、スペースを入れずに指定します。 no は、特定の指令でのみ使用できます。『コンパイラへの指令』 の章で、no を使用できる指令を具体的に示しています。
keyword 『コンパイラへの指令』の章で説明している、1 つまたは複数のコンパイラ指令です。複数の指令を指定した場合は、指令を引用符で囲む必要があります。 これにより、引用符内の指令はすべて、一つのまとまりとして UNIX に認識されます。引用符を使用しないと、2 番目以降の指令は無視されますが、それに関する警告は表示されません。
parameter keyword で必要とされるもので、特定の指令でのみ必要です。『コンパイラへの指令』の章で、parameter を使用する指令を具体的に示しています。次のいずれかの形式で指定する必要があります。

"parameter"

または

=parameter

または

(parameter)

また、parameter は、keyword との間に空白を入れずに指定する必要があります。1 つのコンパイラオプション内に空白文字を含めないでください。 UNIX では、空白文字がオプションの区切り文字と解釈されてしまうため、コンパイラオプションに空白文字が含まれていると、そのオプションは複数のオプションと見なされます。 parameterファイル名の場合は、他に特別な説明がない限り、パスも含めた完全なファイル名を指定することができます。

$SET 文、または DIRECTIVES ファイルに コンパイラオプションを指定した場合、parameter の前に等号 (=) を付ける形式は使用できません。二重引用符 (" ") またはかっこのどちらかで囲む形式にする必要があります。

オプションは、できるだけパラメータの前に等号を使用する形式で指定することをお奨めします。cob は等号 (UNIX では特別な意味を持たない) を、かっこを使用する形式 (UNIX で特別な意味を持つ) にマップします。等号を使用する形式をお奨めするのは、それ以外の形式を使用する場合、UNIX のシェルで誤って解釈されないように、引用符またはかっこをバックスラッシュ(\)でエスケープする必要があるためです。等号は特別な意味を持たないため、エスケープする必要がありません。

次の例で、パラメータの前に等号を使用して、同じコンパイラ指令を指定する方法を 2 つ示します。これらは推奨する方法です。

cob -C assign=external -C flag=ans85 pi.cbl

または

cob -C "assign=external flag=ans85" pi.cbl

どちらの例でも、すべてのファイルのデータ名への割り当ては、外部的に解決されるものとし、コンパイル対象プログラム内の機能のうち、COBOL 言語の ANSI'85 方言に存在しないものにフラグを立てるという指示をコンパイラに指定します。最初の例では、cob の -C フラグを、それぞれのコンパイラ指令のすぐ前に指定しています。2 つ目の例では、引用符を使用して -C フラグ以降の引用符で囲まれたすべての指令を 1 つのグループとして UNIX で解釈されるようにしています。

6.5.2 指令の設定

指令の入力には様々な方法があります。様々なオプションは、コンパイラに渡す順序によって、その優先順位が決まります。詳細は、『COBOL システムインターフェイス (Cob)』 の章を参照してください。構文チェックフェーズに作用するコンパイラ指令は、指定される位置に関係なく、必ず cob の -C フラグの後に指定し、生成フェーズに作用する指令は、必ず -N フラグの後に指定します。

使用可能な指令に関する全詳細は、『コンパイラへの指令』の章で説明しています。環境に依存する指令もあり、特定の環境には適用されないものがあります(これらの制限については指令の説明に記しています)。 これらの指令は、コンパイラに受け取られますが、単なる文書として扱われます。

6.6 COPY ライブラリ

COBOL の COPY 文に関しては、『言語リファレンス』で説明していますが、この文は、コンパイルされるソースコードファイル以外のファイルから、COBOL のソースコードをインクルードする場合に使用します。この項では、COPY 文で使用される名前が、インクルード対象のソースコードを含む物理ファイルに関連付けられる方法を定義します。

基本的な COPY 文のフォーマットは次の通りです。

 

パラメータの内容は次の通りです。

原文名 純粋な COBOL の利用者語、または、組み込み非 COBOL 文字も含む COBOL のユーザ定義語。 引用符で囲みません。

この COBOL システムでは、他の COBOL 方言と互換性があるため、非 COBOL 文字を 原文名に組みこむことができますが、こうした非標準の COBOL の機能を使用すると、ソースの移植性が制限されることがあるので、使用しないことをお奨めします。

原文名を大文字に変換し、引用符で囲むと、外部ファイル名定数 に相当します。

外部ファイル名定数
ファイルの名前で、引用符で囲みます。 登録集名 または 登録集名定数がない場合は、この COPY ファイル名に、拡張子、およびパス名を含めることができます。 単純な COPY ファイル名とは、ファイル名の語幹、および省略可能な拡張子のみを含むものです。修飾された COPY ファイル名とは、カレントディレクトリからの相対パスで示した、詳細なパスが追加されたものです。ファイル名の最後にピリオドをつけると、拡張子が空白文字と見なされます。FOLDCOPYNAME 指令を使用して、ファイルの名前を大文字のみ、または小文字のみにすることができます。


登録集名 COBOL の利用者語。引用符で囲みません。

登録集名を大文字に変換し、引用符で囲むと、登録集名定数 に相当します。

登録集名定数
ディレクトリ、またはライブラリの名前で、引用符で囲みます。 COPY 登録集名には、カレントディレクトリからの相対パスで示したパス名を指定することができます。FOLDCOPYNAME 指令を使用して、ファイルの名前を大文字のみ、または小文字のみにすることができます。

COPY 文の終わりには、必ずピリオド (.) を付けます。

COPYLBR 指令を使用しない場合は、 コンパイラは COPY 登録集名をディレクトリ名として扱います。詳細は、『コンパイラへの指令』の章を参照してください。

COPY 文で省略可能な句が指定されない場合は、コンパイラがメインソースファイルが置かれているディレクトリが登録集名に指定されたものとして動作します。

COBOL では、コピーファイルの名前に関しては、高度な柔軟性を持っていますが、ファイル名にオペレーティングシステムに依存する部分がある場合は、ソースファイルを別のオペレーティングシステムに移動すると、COBOL のソースコードが簡単に コンパイルできなくなる可能性があります。Micro Focus では、コピーファイルの名前にリテラルで小文字の名前を付け、拡張子を .cpy として、パス名を含めないことを推奨しています。

6.6.1 検索順序

COPY 文はコピーする原文を含むファイルを識別する必要があります。ファイルが使用できない場合、コンパイラは、エラーメッセージを表示する、または対話式でファイルを問い合わせてくるなど、QUERY 指令の設定に従って動作します (詳細は、『コンパイラへの指令』の章を参照してください) 。 COPY 文は、修飾された COPY ファイル名が、拡張子付きで指定された場合は、特定のファイルを識別することができますが、それ以外の場合はファイル名を正しく識別できません。

ファイル名拡張子が指定されていない、または、ファイル名パスが指定されない場合は、ファイル名が正しく識別されないことがあります。どちらの場合も、コンパイラは次のように検索を実行します。コンパイラは、一致するファイルを検出すると、検索を停止し、ファイルの内容を COPY の原文として使用します。

COPY ファイル名を拡張子付きで指定すると、コンパイラは同じ拡張子のファイルのみを検索します。 COPY ファイル名に拡張子が指定されていない場合、コンパイラは特定のディレクトリすべてで、 COPYEXT 指令で指定された拡張子のファイルを検索します。この指令のデフォルト値は、UNIX オペレーティングシステムの製品と、他の環境の製品とでは異なりますが、デフォルトの値は、COPYEXT 指令を設定して、簡単に変更することができます。 詳細は、『コンパイラへの指令』の章を参照してください。

デフォルトでは、コンパイラは次の拡張子のファイルを、次の順番に検索します。

  1. 拡張子なし

  2. 拡張子 .cbl

  3. 拡張子 .cpy

修飾された COPY ファイル名を指定した場合、コンパイラは、COPY ファイル名で指定されたディレクトリのみ、ファイルを検索します。 単純な COPY ファイル名を指定した場合は、コンパイラは、次のディレクトリを順番に検索します。

  1. COPY 登録集名で指定されたディレクトリ、または登録集名が指定されない場合は、コンパイル対象の主ソースプログラムがあるディレクトリ

  2. COBCPY 環境変数に列挙されているすべてのディレクトリ

表 6.1 の .cbl への参照例では、COPYEXT の値は UNIX のデフォルト値とし、メインソースファイルはカレントディレクトリにあるものとします。

6.6.2 COBCPY 環境変数

COBCPY 環境変数は、単純な COPY ファイル名が、指定されたライブラリ、またはデフォルトのライブラリで検出されなかった場合に、検索対象ディレクトリをコンパイラに追加指定します。COBCPY は、修飾された COPY ファイル名を指定した場合は無効となります。

COBCPY のフォーマットは次のようになっています。

COBCPY=pathname[:pathname]...

pathname の部分には、コンパイラおよび Animator がコピーファイルを検索する場合の、検索対象ディレクトリを指定します。

たとえば、コマンド行で次のように指定します。

COBCPY="/usr/group/sharedcopy:.:/usr/mydir/mcpy"
export COBCPY

コピーファイルはまず、 /usr/group/sharedcopy、次にカレントディレクトリ、最後に /usr/mydir/mcpy の順で、各ディレクトリで検索されます。コンパイラは、適切なコピーファイルを検出するか、または該当するコピーファイルがないと認識するまで検索を続行します。

表 6-1 : コンパイラの検索順序の例

COPY 文 $COBCPY の内容 検索するファイル (パスも含む)
COPY f1 f1.cbl
f1.cpy
COPY "f1.cop"   f1.cop
COPY "f1.cop" dir1 f1.cop
dir1/f1.cop
COPY "dir/f1" dir1 dir1/f1
dir1/f1.cbl
dir1/f1.cpy
COPY f1 OF dir1   dir1/f1
dir1/f1.cbl
dir1/f1.cpy
COPY f1 dir1/ f1
f1.cbl
f1.cpy
dir1/f1
dir1/f1.cbl
dir1/f1.cpy
COPY f1 IN dir1 /dir2 dir1/f1
dir1/f1.cbl
dir1/f1.cpy
/dir2/f1
/dir2/f1.cbl
/dir2/f1.cpy


注 : システムは、上記の規則に従って $COBCPY を検索する前に、『ファイル操作』マニュアルの『ファイル名』 の章に示す規則に従って、dd_ 環境変数を検索します。指定されたコピーファイルは、dd_ のような変数のマッピングに従って追加検索されます。


6.7 コンパイル時間の短縮方法

この項では、 コンパイル時間を短縮する、コンパイラの最適な使用方法を説明します。

6.7.1 .int ファイルを使用したコンパイル

大容量のアプリケーションを作成する場合は、.int ファイルを使用してコンパイルすると、プログラムのコンパイルに要する時間を短縮することができます。 ソースファイルのかわりに中間コードファイルを使用してコンパイルすると、コンパイラはチェックフェーズを省略し、直接生成フェーズに進みます。 たとえば、myprog.int を、呼び出し可能な共有オブジェクトにコンパイルする場合は次のように入力します。

cob -z myprog.int

これにより、呼び出し可能な共有オブジェクト myprog.so が作成されます。

.int ファイルからシステムの実行可能ファイルを作成するには、次のように入力します。

cob -x myprog.int

6.7.2 コンパイル速度を上げるための指令の使用

コンパイル速度に影響を与えるコンパイラ指令には次のものがあります。

これらの指令の概要を次に示します。すべての指令に関する詳細については、『コンパイラへの指令』の章を参照してください。

ALTER ALTER 指令を指定すると、プログラムで ALTER 文 が使用できます。ソースコード内に ALTER 文が使用されていないことが解っている場合は、NOALTER を指定します。これにより、より効率の良いコードが、より速く生成されます。 デフォルトでは、コンパイラは ALTER が指定されているものとして動作します。

COPYLIST COPYLIST を指定すると、コンパイラはすべてのコピーファイル、およびインクルードファイルの内容を一覧表示します。NOCOPYLIST を指定してリストファイルを作成すると、COBOL のコピーファイルがリストに展開されないため、コンパイル時間が短縮されます。デフォルトでは、コンパイラは COPYLIST が指定されているものとして動作します。

LIST LIST を指定すると、リストファイルが作成されます。 リストファイルが不要な場合は、NOLIST (デフォルト) を指定します。これにより、コンパイルプロセスの速度が上がります。

QUAL 修飾されたデータ名を使用するには QUAL が必要です。たとえば、
group-item-1 of elementary-item-a

のような場合や、集団項目の型定義を使用している場合などです。コンパイラは、デフォルトでは QUAL が指定されていると見なします。

QUALPROC プログラムで修飾されたデータ名が使用されていても、修飾されたパラグラフ名は使用されていない場合は、NOQUALPROC を指定すると、コンパイル速度を上げることができます。デフォルトでは、コンパイラは、 QUALPROC が指定されているものとして動作します。

SEG SEG 指令を指定すると、プログラムで区分が使用できます。ソースコードで区分が使用されていないことが解っている場合は、NOSEG を指定します。これにより、より効率の良いコードが、より速く生成されます。デフォルトでは、コンパイラは SEG が指定されているものとして動作します。

いつも決まった指令セットでプログラムをコンパイルする場合は、プログラムコード内で $SET コマンドを使用して、指令を設定することができます。 たとえば、プログラムで ALTER 文を使用しない場合は、プログラムに次のような指令を設定することができます。

$SET noalter

指令の設定に関する詳細情報は、『指令』 の項を参照してください。


Copyright(C) 2001 Micro Focus. All rights reserved.
本書ならびに、使用されている固有の商標と商品名 は国際法で保護されています。

前ページへプログラムの作成 コンパイラへの指令次ページへ