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

INITIAL 属性

INITIAL 属性は、変数にストレージが割り振られるときにその変数に 割り当てられる初期値を指定するものです。 要素変数には、初期値を 1 つしか指定することができません。 配列変数には複数の初期値を指定することができます。 構造変数または共用体変数の場合は、その基本名 (要素変数か配列変数かの別を 問わず) を使って個別に初期設定するという方法でのみ、初期設定することがで きます。 定数、定義済みデータ、制御なしパラメーター、および非 LIMITED 静的入り口変数 に、INITIAL 属性を与えることはできません。

INITIAL 属性には、3 つのフォーマットがあります。

  1. 最初のフォーマット INITIAL では、初期定数、式、または関数参照を指定します。その値 が、ストレージ割り振り時に変数に割り当てられます。
  2. 2 番目のフォーマット INITIAL CALL では、初期設定を行うためにプロシージャーを呼び出 すことを、CALL オプションによって指定します。 変数の初期設定は、呼び出されたルーチンの実行中に割り当てによって行われます (ルーチンが関数として呼び出されて値を呼び出し点に戻すという方法で初期設定が行われるのではありません)。
  3. 3 番目のフォーマット INITIAL TO では、ポインター (またはポインターの 配列) が INITIAL LIST に指定された文字ストリングのアドレスで初期化される ことを指定します。 また、ストリングにも TO キーワードで示された属性があります。

構文図を読む構文図をスキップする               .-,--------.
               V          |
>>-INITIAL--(----| item |-+--)--| item: |----------------------->
 
>--+-*---------------------------+-----------------------------><
   +-| initial-constant |--------+
   +-reference-------------------+
   +-(expression)----------------+
   '-| iteration-specification |-'
 
iteration-specification:
 
|--(-+-iteration-factor-+-)--| iteration-item |-----------------|
     '-*----------------'
 
iteration-item:
 
|--+-*--------------------+-------------------------------------|
   +-| initial-constant |-+
   +-reference------------+
   |    .-,----.          |
   |    V      |          |
   '-(----item-+--)-------'
 
initial-constant:
 
|--+-+-----+--arithmetic-constant---------------------+---------|
   | +- + -+                                          |
   | '- - -'                                          |
   +-bit-constant-------------------------------------+
   +-character-constant-------------------------------+
   +-graphic-constant---------------------------------+
   +-entry-constant-----------------------------------+
   +-file-constant------------------------------------+
   +-label-constant-----------------------------------+
   '-+-----+-real-constant-+- + -+-imaginary-constant-'
     +- + -+               '- - -'
     '- - -'
 

および

構文図を読む構文図をスキップする>>-INITIAL CALL--+-entry-reference-+--+------------------+-----><
                 +-generic-name----+  |   .-,--------.   |
                 '-built-in-name---'  |   V          |   |
                                      '-(---argument-+-)-'
 

構文図を読む構文図をスキップする                                        .-,--------.
                                        V          |
>>-INITIAL TO--(--+-varying----+--)--(----| item |-+--)--------->
                  +-varyingz---+
                  '-nonvarying-'
 
>--| item: |----(INITIAL の説明を参照。)-----------------------><
 

省略形: INIT、INIT CALL、INIT TO

*
エレメントを、反復因数として使用する場合を除き、初期化しないままにしておくことを指定します。
反復因数
配列のエレメントを初期設定するときに、項目を何回反復するかを指定します。

反復因数は、式であってもアスタリスクであってもかまいません。

反復因数と初期値の両方にアスタリスクを使用することはできません。

反復因数に負またはゼロの値を指定すると、初期設定は行われません。

constant
reference
expression
これらは、初期設定される変数に割り当てられる初期値を指定します。
INITIAL CALL
INITIAL CALL では、渡される入り口参照および引数リストは、 ブロックの活動化に記載されているような、ブロックを活動化するために 設定された条件を、満たしていなければなりません。

INITIAL CALL は、静的データの初期設定に使用することはできません。

次の例では、 A のすべてのエレメントは、 どのエレメントも INITIAL 属性を必要とすることなく、X'00' に初期設定されています。

  dcl  1  A automatic,
         2  ...,
         2  ...,
         2  * char(0) initial call plifill( addr(A), '00'X, stg(A) );

INITIAL CALL 属性を持つ AUTOMATIC 変数は、 他の用途に使用されない場合でも保存されます (プログラムのロジック によってコールを実行する必要が生じた場合に備えて)。

INITIAL CALL ステートメントによって呼び出されたプロシージャーが、 FETCH ステートメントまたは RELEASE ステートメントで指定されており、 主記憶域に存在しない場合、INITIAL CALL ステートメントは、そのプロシージャーの 動的ロードを開始します。 (動的ロードの詳細については、外部プロシージャーの動的ロードを参照してください。)

INITIAL TO
静的固有のポインターにのみ使用してください。 ポインター (または、ポインターの配列) が INITIAL LIST で指定された文字 ストリングのアドレスで初期化されることを指定します。 また、ストリングに TO キーワードで示された属性があることも指定します。

次の例では、pdays は曜日を含む varyingz ストリングのア ドレスの文字で初期化されます。

   dcl pdays(7) static ptr init to(varyingz)
                  ('Sunday',
                   'Monday',
                   'Tuesday',
                   'Wednesday',
                   'Thursday',
                   'Friday',
                   'Saturday'  );

INITIAL TO で初期化されたポインターによって識別された値を変更しないでください。 この値を読み取り専用のストレージに入れることができますが、値を変更しようとすると 記憶保護例外になることがあります。 前述の例の配列 pdays では、次の例は正しくない割り当てです。

  dcl x char(30) varz based;

  pdays(1)->x = 'Sonntag';

Terms of use | Feedback

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