DEFAULT ステートメントは、(属性セットが完全ではない場合は) データ属性のデフォルトを指定します。 部分的に完成された明示宣言やコンテキスト宣言、あるいは暗黙宣言の場合、 DEFAULT ステートメントが適用されない属性については、 言語に固有のデフォルトが適用されます。
DEFAULT ステートメントはほかのすべての属性指定を無効にします。 ただし、ENTRY 属性または FILE 属性を付けて、 かつ VARIABLE 属性を暗黙指定する属性は付けずに宣言された名前については、 DEFAULT ステートメントの適用に先立ち、PL/I が暗黙の CONSTANT 属性を指定します。 したがって、下記の例の場合は、PL/I によって Xtrn に CONSTANT 属性が 指定され、STATIC 属性は指定されません。
Sample: proc;
default range(*) static;
dcl Xtrn entry;
end;
構造体および共用体のエレメントには、修飾されたエレメント名ではなく、 エレメントの名前に応じてデフォルト属性が指定されます。 DEFAULT ステートメントは、 構造体や共用体を作成するためには使用できません。
RANGE (ABC)上記の場合、下記の名前には適用されます。
ABC ABCD ABCDEただし、下記の名前には適用されません。
ABD ACB AB Aしたがって、範囲指定に 1 文字の ID を指定した場合は、 その文字で始まるすべての名前に ID が適用されます。 RANGE の ID は DBCS で指定できます。
RANGE(A:G,I:M,T:Z)
DFT RANGE (*) PIC '99999';
このステートメントは、すべての名前について、 デフォルト属性 REAL PICTURE '99999' を指定します。
範囲オプションを使用した分配指定 の例を次に示します。
DEFAULT (RANGE(A)FIXED, RANGE(B)
FLOAT)BINARY;
このステートメントは、最初の文字が A である名前にデフォルト 属性 FIXED BINARY を指定し、最初の文字が B である名前に FLOAT BINARY を 指定します。
以下に例を示します。
DEFAULT DESCRIPTORS BINARY; DCL X ENTRY (FIXED, FLOAT);
リスト内のそれぞれのパラメーター記述子に属性 BINARY が追加され、 次のように同等なリストが作成されます。
(FIXED BINARY, FLOAT BINARY)
この属性リストからは、データ項目の宣言を完結させるために必要な属性だけが取り出されます。
FILE を使用した場合は、属性 VARIABLE と INTERNAL が暗黙指定されます。
次元属性は指定可能ですが、属性指定の最初の項目としてだけ 指定できます。 境界は算術定数または式として指定でき、REFER オプションを 組み込むことができます。 以下に例を示します。
DFT RANGE(J) (5); DFT RANGE(J) (5,5) FIXED;
DEFAULT ステートメントは、明示的に宣言されていない 名前の次元属性を指定できますが、属性 BUILTIN を指定すると、 添え字付きの名前がコンテキスト的に宣言されます。 したがって、デフォルトでは次元属性は明示的に宣言された名前にだけ 適用できます。
INITIAL 属性を指定できます。
データ項目に適用すると相互に対立する属性でも、属性指定では対立するとは限りません。 以下に例を示します。
DEFAULT RANGE(S) BINARY VARYING;
この場合、文字 S で始まり、BIT、CHARACTER、または GRAPHIC 属性 を指定して明示的に宣言された名前には VARYING 属性が指定され、 その他のすべての名前 (算術データ以外のものとして明示的にまたはコンテキストで 宣言されていない) には BINARY 属性が指定されます。
VALUE は、区域のサイズ、ストリングの長さ、および数値精度に関する デフォルトの規則を確立します。
DEFAULT ステートメントで、VALUE オプションは、区域のサイズ、ストリングの長さ、または数値精度 を指定できる場所にのみ置きます。
VALUE 文節の中のこれらのサイズ、長さ、および精度の指定は、システム・デフォルト属性 の後で、サイズ、長さ、および精度に関するシステム・デフォルトより前に適用されます。 したがって、例えば DCL I; および DEFAULT RANGE(*) VALUE( FIXED BIN(31) ); があるとした場合、変数 I はシステム・デフォルト属性である FIXED BIN を受け取りますが、精度 31 は (システム・デフォルトである 15 ではなく) VALUE オプションから受け取ります。
AREA データのサイズや、BIT、CHARACTER、または GRAPHIC データの長さは、 式または整数で表すことができ、REFER オプションを使用することもできます。 また、アスタリスクとして指定することもできます。
以下に例を示します。
DEFAULT RANGE(A:C)
VALUE (FIXED DEC(10),
FLOAT DEC(14),
AREA(2000));
DECLARE B FIXED DECIMAL,
C FLOAT DECIMAL,
A AREA;
これらのステートメントは、下記のステートメントと同等です。
DECLARE B FIXED DECIMAL(10),
C FLOAT DECIMAL(14),
A AREA(2000);
value-specification では、特定の属性における精度指定であることが わかるように、基数属性とスケール属性を記入する必要があります。 基数属性とスケール属性は属性配分することができます (属性分配を参照のこと)。
VALUE オプションの影響を受ける属性は、区域のサイズ、ストリングの 長さ、および精度だけです。 上記の例での CHARACTER や FIXED BINARY など、オプションのその他の属性は、単に値を関連付ける属性を示すに過ぎません。 次の例を考えてみてください。
DEFAULT RANGE(I) VALUE(FIXED DECIMAL(8,3)); I = 1;
I が明示的に宣言されていない場合、I には、言語で定められている デフォルトの属性 FIXED BINARY (15,0) が与えられます。 I は DEFAULT ステートメントの影響を受けません。なぜなら、 このステートメントは、FIXED DECIMAL である名前のデフォルトの精度が (8,3) であることだけを指定しているからです。
以下に例を示します。
DFT RANGE(*) VALUE(FIXED BINARY(31));
一方、次の例は、デフォルトの属性として FIXED BINARY を指定し、 同時に精度を指定しています。
DFT RANGE(*) FIXED BINARY VALUE(FIXED BINARY(31));
1 つのブロック内に複数の DEFAULT ステートメントを指定することができます。 DEFAULT ステートメントの有効範囲は、そのステートメントが指定されているブロック、および、そのブロック内で、同じ範囲の別の DEFAULT ステートメントを含まず、なおかつ同じ範囲の DEFAULT ステートメントを持つブロックに包含されていないすべてのブロックです。
内部ブロックの DEFAULT ステートメントは、明示的に宣言された名前に対してのみ効果があります。 これは、暗黙宣言の場合、その名前が使われている外部プロシージャーの PROCEDURE ステートメントのすぐ後にある DECLARE ステートメントでその名前が宣言されているかのように、宣言の有効範囲が決められるからです。
あるブロック内の DEFAULT ステートメントで指定した範囲が、そのブロックに 含まれているブロック内の DEFAULT ステートメントで指定した範囲と部分的に 重なり合ってもかまいません。 このような場合、包含ブロック内の DEFAULT ステートメントの範囲は、被包含 ブロック内の DEFAULT ステートメントの範囲分だけ減少することになります。 以下に例を示します。
P: PROCEDURE;
L1: DEFAULT RANGE (XY) FIXED;
Q: BEGIN;
L2: DEFAULT RANGE (XYZ) FLOAT;
END P;
DEFAULT ステートメント L1 の有効範囲は、プロシージャー P および 包含ブロック Q です。DEFAULT ステートメント L1 の範囲は、文字 XY で始まる プロシージャー P 内のすべての名前、および文字 XY で始まる開始ブロック Q 内の すべての名前です。ただし、文字 XYZ で始まる名前は除きます。
DEFAULT ステートメントの接頭部としてラベルを指定できます。 このようなラベルへの分岐は、ヌル・ステートメントへの分岐として 扱われます。 条件接頭語は、DEFAULT ステートメントに付加できません。