Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

OPTIONS オプションとその属性

OPTIONS オプションは、ステートメント PACKAGE、PROCEDURE、 ENTRY および BEGIN に指定することができます。 OPTIONS 属性は、ENTRY 宣言で指定することができます。 これは、ブロックやプロシージャーの呼び出しに適用する処理の特性を指定するために使用されます。 以下の構文図に示されているオプションは、英字順に リストされており、*** ページから説明されています。

構文図を読む構文図をスキップするBEGIN ステートメント
 
              .-------------------------.
              V   .-ORDER-------.       |
>>-OPTIONS--(---+-+-------------+-----+-+-)--------------------><
                | '-+---------+-'     |
                |   '-REORDER-'       |
                | .-NOCHARGRAPHIC---. |
                +-+-----------------+-+
                | '-+-------------+-' |
                |   '-CHARGRAPHIC-'   |
                | .-NOINLINE---.      |
                '-+------------+------'
                  '-+--------+-'
                    '-INLINE-'
 

構文図を読む構文図をスキップするENTRY 宣言
 
               .-------------------------------------.
               V                                     |
>>-OPTIONS--(----+-+-----------------------+-------+-+--)------><
                 | +-ASSEMBLER-+---------+-+       |
                 | |           '-RETCODE-' |       |
                 | +-COBOL-----------------+       |
                 | '-FORTRAN---------------'       |
                 +-FETCHABLE-----------------------+
                 | .-BYADDR------.                 |
                 +-+-------------+-----------------+
                 | '-+---------+-'                 |
                 |   '-BYVALUE-'                   |
                 +-+--------------+----------------+
                 | +-DESCRIPTOR---+                |
                 | '-NODESCRIPTOR-'                |
                 +-LINKAGE-(-linkage-)-------------+
                 | .-IRREDUCIBLE---.               |
                 +-+---------------+---------------+
                 | '-+-----------+-'               |
                 |   '-REDUCIBLE-'                 |
                 '-+-----------------------------+-'
                   +-NOMAP-+----------------+----+
                   |       '-parameter-list-'    |
                   +-NOMAPIN-+----------------+--+
                   |         '-parameter-list-'  |
                   '-NOMAPOUT-+----------------+-'
                              '-parameter-list-'
 

構文図を読む構文図をスキップするENTRY ステートメント
 
>>-OPTIONS--(--------------------------------------------------->
 
   .-----------------------------------------------.
   V                                               |
>----+-+-----------------------+-------+-REENTRANT-+--)--------><
     | +-ASSEMBLER-+---------+-+       |
     | |           '-RETCODE-' |       |
     | +-COBOL-----------------+       |
     | '-FORTRAN---------------'       |
     | .-BYADDR--.                     |
     +-+---------+---------------------+
     | '-BYVALUE-'                     |
     +-+--------------+----------------+
     | +-DESCRIPTOR---+                |
     | '-NODESCRIPTOR-'                |
     +-DLLINTERNAL---------------------+
     +-LINKAGE(linkage)----------------+
     +-+-----------------------------+-+
     | +-NOMAP-+----------------+----+ |
     | |       '-parameter-list-'    | |
     | +-NOMAPIN-+----------------+--+ |
     | |         '-parameter-list-'  | |
     | '-NOMAPOUT-+----------------+-' |
     |            '-parameter-list-'   |
     | .-IRREDUCIBLE---.               |
     '-+---------------+---------------'
       '-+-----------+-'
         '-REDUCIBLE-'
 

構文図を読む構文図をスキップするPACKAGE ステートメント
 
              .-------------------------.
              V   .-NOCHARGRAPHIC---.   |
>>-OPTIONS--(---+-+-----------------+-+-+-)--------------------><
                | '-+-------------+-' |
                |   '-CHARGRAPHIC-'   |
                | .-ORDER-------.     |
                +-+-------------+-----+
                | '-+---------+-'     |
                |   '-REORDER-'       |
                '-+-----------+-------'
                  '-REENTRANT-'
 

構文図を読む構文図をスキップするPROCEDURE ステートメント
 
               .--------------------------------------.
               V                                      |
>>-OPTIONS--(----+-+-----------+--------------------+-+--)-----><
                 | +-ASSEMBLER-+                    |
                 | +-COBOL-----+                    |
                 | '-FORTRAN---'                    |
                 +-+---------------------+----------+
                 | +-FETCHABLE-----------+          |
                 | '-MAIN--+-----------+-'          |
                 |         '-NOEXECOPS-'            |
                 | .-BYADDR--.                      |
                 +-+---------+----------------------+
                 | '-BYVALUE-'                      |
                 | .-NOCHARGRAPHIC-.               |
                 +-+----------------+---------------+
                 | '-CHARGRAPHIC----'               |
                 +-+--------------+-----------------+
                 | +-DESCRIPTOR---+                 |
                 | '-NODESCRIPTOR-'                 |
                 +-DLLINTERNAL----------------------+
                 +-FROMALIEN------------------------+
                 +-LINKAGE--(--linkage--)-----------+
                 +-+------------------------------+-+
                 | +-NOMAP--+----------------+----+ |
                 | |        '-parameter-list-'    | |
                 | +-NOMAPIN--+----------------+--+ |
                 | |          '-parameter-list-'  | |
                 | '-NOMAPOUT--+----------------+-' |
                 |             '-parameter-list-'   |
                 | .-NOINLINE-.                    |
                 +-+-----------+--------------------+
                 | '-INLINE----'                    |
                 | .-ORDER---.                      |
                 +-+---------+----------------------+
                 | '-REORDER-'                      |
                 | .-IRREDUCIBLE-.                  |
                 +-+-------------+------------------+
                 | '-REDUCIBLE---'                  |
                 +-REENTRANT------------------------+
                 +-RETCODE--------------------------+
                 '-WINMAIN--------------------------'
 

オプションは、ブランクまたはコンマで区切られます。 これらは、任意の順番に示すことができます。

ASSEMBLER
省略形: ASM

このオプションは NODESCRIPTOR と同じ効果があります。

プロシージャーに ASSEMBLER オプションがある場合、そのプロシージャーの終了によって、 PLIRETV() 値が、そのプロシージャーの戻り値として使用されます。

詳細については、「プログラミング・ガイド」を参照してください。

BYADDR または BYVALUE
引数とパラメーターがどのように受け渡しされるのかを指定します。 BYADDR はデフォルトです。

BYVALUE は、既知の長さとサイズを持つスカラー引数および スカラー・パラメーターに対してのみ指定できます。

BYVALUE および BYADDR 属性は、入り口宣言の記述子リスト、 およびパラメーター宣言の属性リスト内にも指定することができます。 入り口またはパラメーター宣言に BYVALUE または BYADDR を指定すると、OPTIONS ステートメントに指定されたオプションが無効になります。

以下の例では、入り口宣言と OPTIONS オプションの 両方に BYVALUE および BYADDR を表しています。 例では、コンパイラー・オプション DEFAULT (BYADDR) が有効であると想定しています。

例 1

  MAINPR: proc options(main);

 
    dcl D entry (fixed bin byaddr,
                 ptr,
                 char(4) byvalue)         /*  byvalue not needed      */
          options(byvalue);
    dcl E2 entry;                         /* default(byaddr) in effect */
    dcl Length fixed bin,
        P      pointer,
        Name   char(4);

 
    call D(Length, P, Name);             /* Length is passed byaddr */
                                         /* P is passed by value */
                                         /* Name is passed by value */

 
    call E2(P);                          /* P is passed by address */

 
  D: proc(I, Q, C)
     options(byvalue);
    dcl I fixed bin byaddr,
        Q ptr,
        C char(4) byvalue;

 
  E2: proc(Q);
     dcl Q ptr;

例 2

  dcl F entry (fixed bin byaddr,        /*  byaddr not needed       */
               ptr,
               char(4) byvalue)
        options(byaddr);
  dcl E3 entry;
  dcl E4 entry (fixed bin byvalue);

 
  call F(Length, P, Name);             /* Length is passed byaddr */
                                       /* P is passed byaddr      */
                                       /* Name is passed by value */

 
  call E3(Name);                       /* Name is passed byaddr   */
  call E4(Length);                     /* Length is passed by value */

 
  F: proc(I,P,C) options(byaddr);
    dcl I fixed bin byaddr;             /*  byaddr not needed       */
    dcl P ptr byaddr;                   /*  byaddr not needed       */
    dcl C char(4) byvalue;              /*  byvalue needed          */

 
  E3: proc(L);
     dcl L char(4);

 
  E4: proc(N);
     dcl N fixed bin byvalue;
CHARGRAPHIC または NOCHARGRAPHIC
省略形: CHARG、NOCHARG

外部プロシージャーの省略形は、NOCHARG です。 内部プロシージャーと開始ブロックは、それらが含まれているプロシージャーからデフォルトを継承します。

CHARG が有効な場合には、以下のようなセマンティックの変更が起こります。

NOCHARG が有効な場合は、セマンティックの変更は起こりません。

COBOL
このオプションは NODESCRIPTOR (下記を参照) と同じ効果を持ち、さ らに OPTION(COBOL) の効果を加えたものです。
DESCRIPTOR または NODESCRIPTOR
入り口宣言またはプロシージャー・ステートメントで指定したプロシージャーが呼び出されたときに、記述子リストを渡すかどうかを示します。

DESCRIPTOR が示される場合、必要に応じてコンパイラーは記述子を渡します。

NODESCRIPTOR が示される場合には、コンパイラーは記述子を渡しません。

上記のどちらも表示されない場合には、呼び出されたプロシージャーの いずれかのパラメーターがストリング、配列、区域、構造体、または共用体であるときだけ、DESCRIPTOR が想定されます。

いずれかのパラメーターまたはエレメントが、以下の条件に当てはまっている 場合、プロシージャー・ステートメントまたは入り口宣言に NODESCRIPTOR があると、エラーになります。

ただし、範囲が指定されていないパラメーターが NONASSIGNABLE VARYING または VARYINGZ ストリングの場合は、NODESCRIPTOR を利用できます。

DLLINTERNAL
このオプションは、プロシージャーまたは項目が DLL の内部にあることが意図されており、結果として、その名前はコンパイラーによって生成された定義サイド・ファイルに含まれるべきでないことを示します。

DLLINTERNAL 属性は、EXTERNAL プロシージャーまたは ENTRY でのみ有効です。

FETCHABLE
このオプションは、必要に応じて、プロシージャーを呼び出す前に動的に取り出すかどうかを示します。

FETCHABLE 属性は、INTERNAL プロシージャーでは無効です。

FETCHABLE プロシージャーは、MAIN プロシージャーが含まれるロード・モジュール にはリンクしないでください。

FORTRAN
このオプションを使用すると、文字変数以外の記述子は渡されなく なります。
FROMALIEN
このオプションは、プロシージャーを非 PL/I ルーチンから呼び出すことができるかどうかを示します。 FROMALIEN は任意のプロシージャーで指定できます。ただし、その場合は不必要なオーバーヘッドが生じることになります。
INLINE または NOINLINE
INLINE と NOINLINE のオプションは最適化オプションであり、パッケージ内の開始ブロックおよびネストされないレベル 1 のプロシージャー用に指定できます。

INLINE は、開始ブロックまたはプロシージャーがパッケージ内で 呼び出されたとき、その開始ブロックまたはプロシージャーのコードが 呼び出し点でインライン で実行されることを示します。 INLINE が指定されていても、コンパイラーは、開始ブロックまたは プロシージャーをインラインとしないように選択することができます。

NOINLINE は、開始ブロックまたはプロシージャーがいかなる場合にも インラインで実行されないように指示します。

OPTIONS(INLINE) を使用すれば、 適切に構造化された読みやすいコードを書くのが容易になります。 例えば、プログラムをプロシージャーのセットへの一連の呼び出しとして 作成した場合、OPTIONS(INLINE) を使えば、 これらのプロシージャーを 1 つ 1 つ呼び出す必要がなくなり、 オーバーヘッドが少なくなります。

プロシージャーまたは開始ブロックをインラインで実行すると、ONLOC などの組み込み関数によって戻される値は、 その関数がインライン化されているプロシージャーの名前を戻します。 同様に、トレースバックされた情報には、 呼び出されたプロシージャーは含まれません。

インライン化できないプロシージャーと開始ブロックがあります。 以下のものを含めますが、これらに限定することはありません。

INLINE オプションを指定したネストされないプロシージャーが 外部ではなく参照もされない場合、 このプロシージャーのためのコードは作成されません。 INLINE も NOINLINE も指定されていないプロシージャーについては、 DEFAULT コンパイラー・オプションがオプションをセットします。

INLINE と NOINLINE の詳しい使用法については、「プログラミング・ガイド」を参照してください。

LINKAGE
このオプションは、使用する呼び出し規約を指定し、PROCEDURE ステートメントおよび ENTRY 宣言で指定されます。
CDECL (INTEL のみ)
このオプションは、32 ビット C コンパイラーが 使用する CDECL リンケージ規約を指定します。
OPTLINK
このオプションは最高速リンケージ規約であり、デフォルト設定されています。 これは、ほとんどのコンパイラーの場合は標準のリンケージではありません。
STDCALL (Windows のみ)
このオプションは、STDCALL (すべての Windows API が 使用する標準のリンケージ規約) を指定します。
SYSTEM
このオプションは、オペレーティング・システムを呼び出すときに 使用する呼び出し規則を指定します。 このオプションは OPTLINK よりも低速ですが、すべての MVS および AIX アプリケーションの標準オプションです。

呼び出し規則の詳細については、「プログラミング・ガイド」を参照してください。

MAIN
このオプションは、この外部プロシージャーが PL/I プログラムの 初期プロシージャーであることを示します。 1 プログラムにつき 1 つの外部プロシージャーにだけ、 MAIN が有効であり、必要とされます。 オペレーティング・システムの制御プログラムは、そのプログラムの実行の最初のステップとしてこのプロシージャーを呼び出します。

OPTIONS(MAIN) を指定した、 複数のプロシージャーを含んでいる PL/I プログラムは、 予測できない結果を生じることがあります。

NOEXECOPS
NOEXECOPS オプションは、MAIN オプションを使用する場合だけ有効です。 このオプションは、ランタイム・オプションが、プログラムを呼び出すコマンドや ステートメントでは指定できないこと指定します。 主プロシージャーのパラメーターだけが指定されます。
NOMAP、NOMAPIN、NOMAPOUT
これらのオプションは、COBOL または FORTRAN と PL/I との インターフェースでデータ集合体の自動操作を防ぎます。

各オプション引数リストは、適用するオプションのパラメーターを指定します。 パラメーターは、どのような順番でも表示でき、コンマまたはブランクによって分離することができます。 オプション用の引数リストがない場合、項目名のすべてのパラメーターはデフォルト・リストになります。

NOMAP、NOMAPIN、または NOMAPOUT は、同一の OPTION 指定にすべて表示 することができます。 この指定は、複数の指定またはデフォルト引数リストの同一パ ラメーターに含まれてはなりません。

これらのオプションは受け入れられますが、COBOL オプションが適用されない限りは無視されます。

ORDER または REORDER
ORDER と REORDER は、プロシージャーまたは開始ブロックに指定される最適化オプションです。

ORDER は、ブロック内で修正された変数の最も新しく 割り当てられた値だけが入力される ON ユニットで 利用できることを示します。これは、ステートメントの 実行時およびブロック内の式で計算条件が生じたためです。

REORDER オプションを指定すると、コンパイラーが最適化コードを生成し、エラー・フリーの実行があった場合に、ソース・プログラムに指定された結果を生成することができます。

ORDER と REORDER オプションの詳細については、 「プログラミング・ガイド」を参照してください。

上記のオプションが両方とも外部プロシージャーに指定されない場合には、 デフォルトとして DEFAULT コンパイラー・オプションがセットされます。 内部ブロックは、含まれているブロックから ORDER または REORDER を継承します。

REDUCIBLE または IRREDUCIBLE
省略形: RED、IRRED

REDUCIBLE は、引数 (1 つまたは複数) が変更されない限り、 プロシージャーまたは入り口を複数回呼び出す必要がないこと、 およびプロシージャーの呼び出しに副次作用がないことを示します。

例えば、変更されないデータに基づいて結果を計算するユーザー作成の 関数には、REDUCIBLE が宣言されなければなりません。 乱数や時刻などの、変更されるデータに基づいて結果を計算する 関数は、IRREDUCIBLE として宣言する必要があります。

REENTRANT
このオプションは無視されます。Intel および AIX プラットフォームでは すべての PL/I プログラムが再入可能です。 z/OS プラットフォームでは、RENT コンパイラー・オプションによって、コンパイルされたすべてのプログラムが 再入可能であり、静的変数 (NOWRITABLE コンパイラー・オプションの利用が必要になる場合もあります。) を 変更しないものであれば、その他のプログラムも再入可能です。
RETCODE
このオプションを指定すると、ENTRY 点に ASM または COBOL オプション も指定されている場合、ENTRY は呼び出された後、PL/I 戻りコードとして保管さ れる値を戻します。 基本的に、このような ENTRY が呼び出された場合、その戻り値は PLIRETC サブルーチンに渡されます。
WINMAIN (Windows のみ)
pp599win

このオプションは、 自動的に LINKAGE(STDCALL) および EXT('WinMain') を暗黙指定します。 関連ルーチンには、以下の 4 つのパラメーターを含める必要があります。

  1. インスタンス操作点
  2. 直前の操作点
  3. コマンド行へのポインター
  4. ShowWindow に渡される整数

これらは、C WinMain が予期する 4 つのパラメーターと同じであり、 このルーチンからの呼び出しは、C ルーチンが予期するものと同じです。

pp599end

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)