省略形:INIT
INITIAL は、構造体の変数またはメンバーの初期値を指定するストレージ クラス属性です。INITIAL 属性には 2 つの書き方があります。書き方 1 では、初期の定数、式、または変数を指定します。その値が、記憶域が割り当てられる際に変数に割り当てられます。書き方 2 では、CALL オプションでプロシージャを呼び出して割り当て時に初期化を実行するように指定します。変数の初期化は、呼び出されたルーチンの実行中に割り当てによって行われます。ルーチンが関数として呼び出され、呼び出し元に値が返されることによって行われるのではありません。INITIAL 属性の書き方は次のとおりです。
書き方 1:
INITIAL(item[,item]…)
ここで item は、次のとおりです。
*|constant|variable|expression|iteration-spec
ここで iteration-spec は、次のとおりです。
(iteration-factor) iteration-item
ここで iteration-item は、次のとおりです。
*|constant|variable|expression
ここで iteration-factor は、次のとおりです。
*|expression
ここで constant は、次のとおりです。
arithmetic-constant|bit-constant|character-constant| entry-constant1 label-constant
item または iteration-item のコンテキストでは、アスタリスク (*) は要素を初期化しないことを表します。
iteration-factor のコンテキストでは、アスタリスク (*) は配列全体を iteration-item で初期化することを表します。
静的変数の場合、INITIAL 属性で指定された値は、プログラムが実行のために最初にメモリにロードされる際に割り当てられます。
宣言ブロックが活性化されるたびに割り当てられる自動変数の場合は、指定された初期値が割り当てのたびに割り当てられます。
ALLOCATE 文の実行時に割り当てられる基底付き変数および制御変数の場合は、指定された初期値が割り当てのたびに割り当てられます。
INITIAL 属性は、上記以外のストレージ クラスの変数では使用できません。
静的変数の INITIAL 属性には、操作のない定数値のみを指定できます。ただし、次のような例外があります。
DECLARE STRING CHAR(11) STATIC INIT ('MICRO'|| ' FOCUS');
書き方 2:
INITIAL CALL entry(arg[,arg]…)
INITIAL CALL を使用して静的データを初期化することはできません。