バージョン 6.3.3
 —  システムコマンド  —

COMPOPT

COMPOPT [option=value ...]

このシステムコマンドは、各種のコンパイラオプションを設定するために使用します。 設定したオプションは、Natural プログラミングオブジェクトのコンパイル時に評価されます。

オプションなしで COMPOPT コマンドを入力すると、画面が表示されます。この画面では、以降で説明するオプションを有効または無効にできます。

個々のオプションのデフォルト設定は、Natural パラメータファイル内の対応するプロファイルパラメータを使用して設定されます。

このドキュメントでは、次のトピックについて説明します。


構文説明

COMPOPT オプションなしで COMPOPT システムコマンドを発行すると、ダイアログボックスが表示されます。 ここで使用可能なキーワードについては、次で説明します。

Natural スタジオの使用』ドキュメントの「コンパイラオプション」も参照してください。

COMPOPT option=value

ダイアログボックスでオプションを変更する代わりに、COMPOPT コマンドを使用して直接指定することもできます。

例:
COMPOPT DBSHORT=ON

Top of page

コンパイラオプション

次のコンパイラオプションを使用できます。 各オプションの目的および可能な設定の詳細については、対応する Natural プロファイルパラメータの解説を参照してください。

KCHECK | PCHECK | DBSHORT | PSIGNF | TQMARK | THSEP | GFID | MASKCME

Top of page

コンパイラパラメータの指定

コンパイラパラメータは、次のような異なるレベルで指定できます。

  1. デフォルト設定として指定

    個々のコンパイラパラメータのデフォルト設定は、コンフィグレーションユーティリティの[コンパイラオプション]カテゴリを使用して指定し、Natural パラメータファイル NATPARM に保存されます。

  2. セッション開始時に指定

    セッション開始時に、対応するプロファイルパラメータを指定することによって、コンパイラオプション設定を上書きできます。

  3. アクティブな Natural セッション中に指定

    アクティブな Natural セッション中に COMPOPT システムコマンドを使用してコンパイラパラメータの値を変更するには、次の 2 つの方法があります。コマンド割り当て(COMPOPT optionvalue)を使用して直接行う方法、およびオプションなしで COMPOPT コマンドを発行して=[コンパイラオプション]ダイアログボックスを表示する方法です。 コンパイラオプションに割り当てられた設定は、次の LOGON コマンドを別のライブラリに発行するまで有効です。 別のライブラリへの LOGON 時には、デフォルト設定(上記の項目 1 を参照)に戻ります。 次に例を示します。

    OPTIONS KCHECK=ON
    DEFINE DATA LOCAL
    1 #A (A25) INIT <'Hello World'>
    END-DEFINE
    WRITE #A
    END
    
  4. Natural プログラミングオブジェクトに指定

    プログラムやサブプログラムなどの Natural プログラミングオブジェクトに、OPTIONS ステートメントを使用してコンパイラパラメータを設定できます。 次に例を示します。

    OPTIONS KCHECK=ON
    WRITE 'Hello World'
    END
    

    OPTIONS ステートメントで定義したコンパイラオプションは、このプログラミングオブジェクトのコンパイルにのみ影響し、COMPOPT コマンドで設定した一連の設定を更新することはありません。

Top of page

リモートメインフレーム環境での COMPOPT

次に示すトピックは、COMPOPT コマンドをリモートメインフレーム環境で使用する場合にのみ適用されます。

Top of page

コンパイラキーワードパラメータの指定(リモートメインフレーム環境)

コンパイラキーワードパラメータは、次のような異なるレベルで指定できます。

  1. 個々のキーワードパラメータのデフォルト設定は、Natural パラメータモジュール NATPARMNTCMPO マクロに指定します。

  2. セッション開始時に、プロファイルパラメータ CMPO でコンパイラキーワードパラメータを上書きできます。

  3. アクティブな Natural セッション中に COMPOPT システムコマンドを使用してコンパイラキーワードパラメータを変更するには 2 つの方法があります。コマンド割り当て(COMPOPT= optionvalue)を使用して直接行う方法、およびキーワードパラメータなしで COMPOPT コマンドを発行して[Compilation Options]画面を表示する方法です。 コンパイラオプションに割り当てられた設定は、次の LOGON コマンドを別のライブラリに発行するまで有効です。 LOGON 時には、NTCMPO マクロおよびプロファイルパラメータ CMPO(上記参照)のいずれかあるいはその両方で設定されたデフォルト設定に戻ります。 次に例を示します。

    OPTIONS KCHECK=ON
    DEFINE DATA LOCAL
    1 #A (A25) INIT <'Hello World'>
    END-DEFINE
    WRITE #A
    END
    
  4. プログラムやサブプログラムなどの Natural プログラミングオブジェクトに、OPTIONS ステートメントを使用してコンパイラパラメータ(オプション)を設定できます。 次に例を示します。

    OPTIONS KCHECK=ON
    WRITE 'Hello World'
    END
    

    OPTIONS ステートメントで定義したコンパイラオプションは、このプログラミングオブジェクトのコンパイルにのみ影響し、COMPOPT コマンドで設定した一連の設定を更新することはありません。

Top of page

一般的なコンパイラオプション(リモートメインフレーム環境)

次のオプションを使用できます。

これらのオプションは、CMPO プロファイルパラメータと NTCMPO パラメータマクロのいずれかまたは両方のキーワードサブパラメータに対応します。

KCHECK - キーワードチェック

ON プログラミングオブジェクトでのフィールド宣言が、重要な Natural キーワードの集合に対してチェックされます。 定義された変数名がこれらのキーワードのいずれかに一致する場合、プログラミングオブジェクトがチェックまたはカタログされたときに構文エラーが報告されます。
OFF キーワードチェックは実行されません。 これはデフォルト値です。

プログラミングガイド』の「Natural 予約キーワードのチェックの実行」セクションには、KCHECK オプションでチェックされるキーワードのリストが記載されています。

プログラミングガイド』の「Natural 予約キーワードのアルファベット順リスト」セクションには、Natural のすべてのキーワードおよび予約語の概要が記載されています。

PCHECK - CALLNAT ステートメントのパラメータチェック

ON

コンパイラが、CALLNAT ステートメントで指定されたパラメータの数値、フォーマット、長さ、および配列インデックスの限度をチェックします。 また、DEFINE DATA PARAMETER ステートメントの OPTIONAL 機能もパラメータチェックで考慮されます。

パラメータチェックは、CALLNAT パラメータと、呼び出されたサブプログラムの DEFINE DATA PARAMETER 定義との比較に基づいて行われます。

このチェックを行うには、次の条件が必須です。

  • 呼び出されるサブプログラム名が、英数字の変数としてではなく英数字の定数として定義されている。

  • 呼び出されるサブプログラムが、カタログ化オブジェクトとして利用可能である。

これに該当しない場合、PCHECK=ON には何の効力もありません。

CATALL コマンドを PCHECK=ON で使用する場合の問題点

CATALL コマンドを PCHECK=ON に指定して使用するときは、次の点を考慮する必要があります。

CATALL プロセスが開始すると、プログラミングオブジェクトがコンパイルされる順序は、まずオブジェクトのタイプが優先され、次にオブジェクトのアルファベット名で決定されます。 使用されるオブジェクトタイプの順序は、GDA、LDA、PDA、外部サブルーチン、サブプログラム、ヘルプルーチン、マップ、クラス、そして最後にプログラムとなります。 同じタイプのオブジェクトでは、名前のアルファベット順によって、オブジェクトがカタログされる順序が決定されます。

上述したように、CALLNAT ステートメントは、呼び出されたサブプログラムのコンパイル後の形に対してチェックされます。 呼び出し側のオブジェクト(現在はコンパイルが済み、CALLNAT ステートメントが含まれるもの)がヘルプルーチン、マップ、またはプログラムである場合、問題は発生しません。CALLNAT ステートメントで参照されるサブプログラムがすでにカタログされているため、そのオブジェクト形式での最新のパラメータレイアウトで使用できるためです。

ただし、呼び出し側のオブジェクトが外部サブルーチンであるか、または CALLNAT ステートメントで呼び出されたサブプログラムよりもアルファベット順で先になる名前を持つサブプログラムである場合に、CALLNAT ステートメントおよび呼び出されたサブプログラムのパラメータが変更されると、PCHECK の結果が正しくないものになる可能性があります。つまり、パラメータが適切に一致しているのに構文エラー NAT0648/NAT0651 が発生するか、またはパラメータが一致していないのに構文エラーが発生しない場合があります。 この場合、呼び出されたサブプログラムの新しいオブジェクトイメージは、まだ CATALL によって作成されていません。カタログ化の順序が現在コンパイルされているオブジェクトよりも後になるためです。 これにより、CALLNAT ステートメントの新しいパラメータレイアウトが、呼び出されたサブプログラムの DEFINE DATA PARAMETER ステートメントの古いパラメータレイアウトと比較されることになります。

解決策:

  • コンパイラオプション PCHECK=OFF を設定します。

  • 変更されたパラメータの数に応じて次のように処理します。

    • 1 つまたは少数のサブプログラムのパラメータが変更された場合は、これらのオブジェクトに対して別々にコンパイルを実行します。

    • 大量のサブプログラムのパラメータが変更された場合は、タイプが "サブプログラム" であるオブジェクトのみを選択して CATALL を実行します。

  • コンパイラオプション PCHECK=ON を設定します。

  • ライブラリ全体に対し、CATALL で全体コンパイルを実行します。

OFF パラメータチェックは実行されません。 これはデフォルト値です。

DBSHORT - データベースショートフィールド名の解釈

ON

プログラミングオブジェクト内のデータベースフィールド名は、対応する DDM に定義されるようなロングネームとみなされますが、例外として、2 文字のフィールド名は、基礎となるデータベースシステムで使用されるようなショートネームとみなされます。 これはデフォルト値です。

たとえ DBSHORT=ON に設定しても、次の場合には、データベースショートフィールド名は使用できません。

  • プログラムに DEFINE DATA LOCAL が指定されている場合

  • メインフレームプラットフォーム向けではない Natural の場合

  • Natural Security がインストールされている場合

OFF プログラミングオブジェクト内のすべてのデータベースフィールド名は、長さに関係なくロングネームとみなされます。 これにより、プログラムのデータベースフィールド名が誤って解釈される可能性を回避できます。 この設定を使用して、ショートネームの使用を全体的に禁止することができます。

予備知識(DBSHORT=ON)

Natural コンパイラによってデータベースフィールド(DDM に定義されているフィールド)と DBSHORT=ON が解決されるときは、フィールド名の長さを使用して、識別子が "db-short-name" と "db-long-name" のどちらを表すかが判断されます。 フィールド名の長さが 2 文字のときは、"db-short-name" 参照が想定されますが、それ以外のすべての識別子は "db-long-names" として処理されます。

常に適用される Natural 規則

一般的な Natural 規則に従うと、DEFINE DATA LOCAL が指定されたときに、プログラムで "db-short-names" を使用することはできません。ビュー定義や FIND ステートメントの検索式にフィールドリストを作成したり、READ ステートメントや HISTOGRAM ステートメントに読み込み順序制御フィールドを指定することもできません。 これらの制限は、DBSHORT オプションの ON/OFF にかかわらず、Natural コンパイラによって制御されます。

DBSHORT の目的は、コンパイラの動作を次のように変更することです。

DBSHORT=ON すべてが上記の「予備知識」のとおりに動作します。
DBSHORT=OFF あらゆるデータベースフィールド識別子は、何文字で構成されているかにかかわらず "db-long-name" とみなされます。 つまり、DDM のロングネーム列(DDM 表示では "Name" と表記)のみが、参照フィールドを確認するために考慮され、DDM ショートネーム(DDM 表示では "DB" と表記)は完全に無視されます。

DBSHORT=ON の目的

DBSHORT=ON の目的は、Natural プログラムで "db-long-name" を使用する代わりに "db-short-names" を使用して、データベースフィールドを参照できるようにすることです。

DBSHORT=OFF の目的

DBSHORT=OFF を主に使用するのは、2 バイトの長さしかない識別子を持つロングネームが DDM に定義されている場合です。 DDM の生成時に、この DDM でアクセスする、基礎となるデータベースが DB2 などの SQL の場合には、2 バイトのロングネームを作成するだけで済みます。 これ以外のすべてのデータベースタイプについては、2 バイトの名前の長さでロングフィールドを定義しようとすると、エラー SYSDDM4219(SYSDDM ユーティリティ)が発生します。

ただし、DBSHORT=OFF が設定されているときは、DDM の "db-short-name" はコンパイラでチェックされません。 したがって、プログラムで db-short-field が使用されると、構文エラー NAT0981 が発生します。

PSIGNF - パック十進数の正記号の内部表現

ON パック型数値の正の符号は、内部的に H'F' として表されます。 これはデフォルト値です。
OFF パック型数値の正の符号は、内部的に H'C' として表されます。

TSENABL - TS プロファイルパラメータの適用性

このオプションは、プロファイルパラメータ TS(非標準の小文字使用が行われる地域のための出力変換)を、Natural システムライブラリ(SYSTEM を除いた "SYS" で始まる名前のライブラリ)のみに適用するか、またはすべてのユーザーライブラリにも適用するかを決定します。

TSENABL=ON でカタログされた Natural オブジェクトでは、そのオブジェクトがシステムライブラリにない場合でも TS パラメータが決定されます。

ON プロファイルパラメータ TS は、すべてのライブラリに適用されます。
OFF プロファイルパラメータ TS は、Natural システムライブラリのみに適用されます。 これはデフォルト値です。

GFID - グローバルフォーマット ID の生成

このオプションを使用すると、Natural によるグローバルフォーマット ID の内部生成を制御して、フォーマットバッファ変換の再利用に関する Adabas のパフォーマンスに影響を与えることができます。

ON グローバルフォーマット ID がすべてのビューに対して生成されます。 これはデフォルト値です。
VID グローバルフォーマット ID が、ローカル/グローバルデータエリアのビューに対してのみ生成されます。プログラム内で定義されたビューに対しては生成されません。
OFF グローバルフォーマット ID は生成されません。

グローバルフォーマット ID の詳細については、Adabas のドキュメントを参照してください。

Natural でグローバルフォーマット ID を生成するための規則

LOWSRCE - 小文字ソースの許可

このオプションは、小文字または大文字と小文字が混在するプログラムソースをメインフレームプラットフォームで使用できるようにします。 これにより、小文字または混在文字で記述されたプログラムを、他のプラットフォームからメインフレーム環境に移行しやすくなります。

ON プログラムソースですべての小文字/大文字を許可します。
OFF 大文字モードのみを許可します。 このためには、キーワード、変数名および識別子を大文字で定義する必要があります。 これはデフォルト値です。

LOWSRCE=ON を指定して小文字を使用するときは、次の点を考慮してください。

TQMARK - 引用符の変換

ON テキスト定数内の二重引用符は、シングルアポストロフィとして出力されます。 これはデフォルト値です。
OFF テキスト定数内の二重引用符は変換されず、二重引用符として出力されます。

例:

RESET A(A5)                    
A:= 'AB"CD'                    
WRITE '12"34' / A / A (EM=H(5))
END                            

TQMARK ON の場合、次のように出力されます。

12'34     
AB'CD     
C1C27DC3C4

TQMARK OFF の場合、次のように出力されます。

12"34     
AB"CD     
C1C27FC3C4

THSEP - ダイナミック千桁単位セパレータ

このオプションは、コンパイル時に千桁単位セパレータの使用を有効または無効にするために使用できます。 プロファイルパラメータ THSEP、プロファイル/セッションパラメータ THSEPCH、および『プログラミングガイド』の「セパレータ文字の表示方法のカスタマイズ」セクションを参照してください。

ON 千桁単位セパレータを使用します。 文字列リテラルの一部ではないすべての千桁単位セパレータは、内部で制御文字と置き換えられます。
OFF 千桁単位セパレータを使用しません。つまり、コンパイラによって千桁単位セパレータ制御文字は生成されません。 これが互換性のある設定です。

CPAGE - 英数字定数に対するコードページのサポート

CPAGE オプションを使用して、変換ルーチンをアクティブにすることができます。変換ルーチンは、ランタイム時にオブジェクトが起動されると、すべての英数字定数を、コンパイル時にアクティブであったコードページからランタイム時にアクティブなコードページに変換します。

Unicode およびコードページのサポート』ドキュメントの「プロファイルパラメータ」も参照してください。

ON 英字文字列に対するコードページのサポートは有効です。
OFF 英字文字列に対するコードページのサポートは無効です。 これはデフォルト値です。

DB2ARRY - SQL ステートメント SELECT および INSERT での DB2 配列のサポート

DB2ARRY オプションを使用すると、SQL ステートメントの SELECT または INSERT を 1 回実行することによって、複数行を DB2 から取得または DB2 に挿入できるようになります。 これにより、配列を SQL SELECT ステートメントの受け取りフィールドおよび SQL INSERT ステートメントのソースフィールドとして指定できます。 DB2ARRYON に指定すると、DB2 の VARCHAR/GRAPHIC 列に対して Natural の英数字配列を使用できなくなります。 代わりに、Natural のロング英数字変数を使用する必要があります。

ON DB2 配列のサポートが有効です。
OFF DB2 配列のサポートが無効です。 これはデフォルト値です。

Top of page

バージョン互換を維持するためのコンパイラオプション(リモートメインフレーム環境)

次のオプションを使用できます。

これらのオプションは、CMPO プロファイルパラメータと NTCMPO パラメータマクロのいずれかまたは両方のキーワードサブパラメータに対応します。

FINDMUN - FIND ステートメントの比較ロジックの矛盾検出

Natural バージョン 2.3 では、FIND ステートメントの WITH 節のマルチプル設定フィールドに使用する比較ロジックが変更されています。 これは、特定形式の FIND ステートメントが含まれるバージョン 2.2 プログラムがバージョン 3.1 でコンパイルされると、異なる結果が返されることを意味します。 このオプションを使用して、バージョン 3.1 の拡張比較ロジックとは異なる方法でマルチプル設定フィールドが使用される WITH 節を含む FIND ステートメントを検索できます。

ON コンパイル時に検出された、該当する形式のすべての FIND ステートメントに対し、エラー NAT0998 が返されます。
OFF 該当する形式の FIND ステートメントの検索は実行されません。 これはデフォルト値です。

FIND ステートメントの WITH 節のマルチプルバリューフィールドに対する比較ロジックが Natural バージョン 2.3 で変更されたのは、他のステートメント(IF など)の変換ロジックに合わせるためです。

FIND ステートメントの 4 種の形式を区別できます。次の例の MU は、マルチプルバリューフィールドを表します。

  1. FIND XYZ-VIEW WITH MU = 'A'

    バージョン 2.2 以降では、MU の少なくとも 1 つ以上のオカレンスに "A" の値があるレコードが返されます。

  2. FIND XYZ-VIEW WITH MU NOT EQUAL 'A'

    バージョン 2.2 では、MU のどのオカレンスにも "A" の値がないレコードが返されます(4. と同じ)。 バージョン 2.3 以降では、MU の少なくとも 1 つ以上のオカレンスに "A" の値がないレコードが返されます。

  3. FIND XYZ-VIEW WITH NOT MU NOT EQUAL 'A'

    バージョン 2.2 では、MU少なくとも 1 つ以上のオカレンスに "A" の値があるレコードが返されます(1. と同じ)。 バージョン 2.3 以降では、MUすべてのオカレンスに "A" の値があるレコードが返されます。

  4. FIND XYZ-VIEW WITH NOT MU = 'A'

    バージョン 2.2 以降では、MUどのオカレンスにも "A" の値がないレコードが返されます。 これは、2. と 3. の形式の FIND ステートメントが含まれるバージョン 2.2 の既存のプログラムをバージョン 2.3 で新たにコンパイルした場合、異なる結果が返されることを意味します。

FINDMUN=ON を指定すると、コンパイル中に検出された 2. または 3. の形式のすべての FIND ステートメントに対してエラー NAT0998 が返されます。

このような場合でもバージョン 2.2 のときと同じ結果を取得するには、ステートメントを次のように修正する必要があります。

形式 2 の場合:

FIND XYZ-VIEW WITH MU NOT EQUAL 'A'

これを次のように修正します。

FIND XYZ-VIEW WITH NOT MU = 'A'

形式 3 の場合:

FIND XYZ-VIEW WITH NOT MU NOT EQUAL 'A'

これを次のように修正します。

FIND XYZ-VIEW WITH MU = 'A'

MASKCME - MASK の MOVE EDITED との互換性

ON YYYY マスク文字に一致する有効な年の値の範囲は 1582~2699 で、MASK オプションと MOVE EDITED とを互換します。 プロファイルパラメータ MAXYEAR を 9999 に設定した場合は、有効な年の値の範囲は 1582~9999 です。
OFF YYYY マスク文字に一致する有効な年の値の範囲は 0000~2699 です。 これはデフォルト値です。 プロファイルパラメータ MAXYEAR を 9999 に設定した場合は、有効な年の値の範囲は 0000~9999 です。

NMOVE22 - 同じ長さおよび精度の数値変数の割り当て

ON ソースとターゲットの長さと精度が同じである数値変数の割り当ては、Natural バージョン 2.2 の場合と同様に実行されます。
OFF ソースとターゲットの長さと精度が同じである数値変数の割り当ては、Natural バージョン 2.3 以降の場合と同様に実行されます。つまり、ソースとターゲットの長さまたは精度が異なっているかのように処理されます。 これはデフォルト値です。

V41COMP - 新バージョン 4.2 の構文の無効化

重要:
このコンパイラオプションは、Natural バージョン 4.2 で移行をスムーズにするためにのみ使用可能です。 Natural バージョン 4.2 の後のリリースで再び削除されます。

Natural バージョン 4.2 で導入された多数の機能とプログラミング機能は、バージョン 4.2 で開発およびコンパイルされたプログラムをバージョン 4.1 環境でのオペレーションに使用するために再コンパイルするときに、問題を生じる可能性があります。 該当する機能については、下記のリストを参照してください。

V41COMP オプションによって、このような非互換性を検出し、再コンパイルが失敗した原因を示す理由コードを提供するエラーメッセージを表示することができます。 可能な値は次のとおりです。

ON バージョン 4.2 でのプログラムのコンパイル時に、バージョン 4.2 ではサポート対象であっても、バージョン 4.1 ではサポートされない構文構造が使用されようとするたびに拒否し、NAT0647 構文エラーと対応する理由コード(下記参照)を出力します。
OFF バージョン 4.1 の互換性のテストを実行しません。 これはデフォルト値です。

バージョン 4.2 と 4.1 間のコンパイル関連の相違点

次の表に、バージョン 4.2 と 4.1 におけるコンパイル関連の違いの概要、および互換性のない構文が検出されたときに表示される理由コードを示します。

機能 バージョン 4.2 バージョン 4.1 理由コード
新規フォーマット U(Unicode) 可能 不明 001
オカレンスの数が可変である配列

X-array の例:

DEFINE DATA LOCAL
1 #ARR (A10/1:*)
可能 不明 002
英字およびリテラル(定数)に可能な長さ 1 バイト~1 GB 1 バイト~253 バイト(NAT0264) 003
次の新規コンパイラパラメータ:
THSEP 編集マスクでの千桁単位セパレータ文字
CPAGE 英数字定数のコードページ変換
可能 不明 004
次の新規ステートメント:

MOVE NORMALIZED
MOVE ENCODED
PARSE
REQUEST DOCUMENT
EXPAND/REDUCE/RESIZE ARRAY

可能 不明 005
SET GLOBALS ステートメント:
  • セッションパラメータ CPCVERR=ON/OFF

  • ストラクチャードモード(SM=ON)時の使用

可能 不明 006
次のシステム変数:

*PARSE-COL
*PARSE-LEVEL
*PARSE-NAMESPACE-URI
*PARSE-ROW
*PARSE-TYPE
*CODEPAGE
*LOCALE
*TYPE
*CURRENT-UNIT
*UBOUND
*LBOUND

可能 不明 007
未使用 - - 008
INCLUDE で提供されるソースパラメータの長さとタイプ

例:

INCLUDE COPY01 'WRITE *LINE'
               'WRITE *PROGRAM'
フォーマット U(Unicode)で長さは指定なし 英字のみで長さは 80 バイト以下 009
データビューでの Adabas LA フィールドにおける次のいずれかの定義
  • 253 バイトを超えるサイズ

  • タイプ DYNAMIC

可能 不明 010

Top of page