定数とは、特定の変わらない値を表す文字のシーケンスです。Open PL/I では、次の 5 種類の定数を使用できます。
ソース プログラムに記述されている実際の数値または文字列です。文字列、ビット文字列、固定小数点数、浮動小数点数に制限されます。
ソース プログラムでラベル プレフィックスを使用して定義されます。このプレフィックスは、名前をフォーマットまたはプロシージャの名前として宣言するか、文のラベルとして宣言します。ラベル定数を DECLARE 文で宣言することはできません。
通常は DECLARE 文で定義されます。ファイル定数は、FILE 属性を使用して宣言される識別子で、ファイルに対して実行される入出力のタイプを表します。入り口定数は、プロシージャを特定のエントリ ポイントで呼び出すために使用されます。
%REPLACE 文で変更される識別子です。定数識別子には、リテラル定数と同様に、文字列、ビット文字列、固定少数点数、浮動小数点数を使用できます。
BYVALUE 属性を使用して宣言されるスカラー ID です。算術データ、文字列データ、ポインター、オフセットに対して宣言できます。
定数 | タイプ |
---|---|
25 | 整数定数 |
7.5 | 固定小数点定数 |
3.12E-01 | 浮動小数点定数 |
'How are you?' | 文字列定数 |
'1'B | ビット文字列定数 (2 進表記) |
'1011'B | ビット文字列定数 (2 進表記) |
'775'B3 | ビット文字列定数 (8 進表記) |
'A7O'B4 | ビット文字列定数 (16 進表記) |
'100'XN | 2 進固定小数点 (XN) 定数 (16 進表記) |
STARTUPD: | ラベル定数 |
%REPLACE TABLE_SIZE BY 350; | TABLE_SIZE は整数定数に置換される識別子 |
DECLARE E ENTRY; | E は入り口定数 |
DECLARE F FILE; | F はファイル定数 |
非 2 進表記の 2 進表記への展開を示す表については、「Bit-String Data」を参照してください。
算術定数は 10 進値を表します。2 進数の算術値には定数表現はありません。ただし、任意の 10 進定数を簡単に 2 進値に変換できます。2 進数の算術値が必要とされるコンテキストで使用するだけです。
Open PL/I の言語規則により、ソース プログラムに浮動小数点数として出現するすべての定数は、実際にはタイプが浮動小数となり、浮動小数の算術規則に従います。
文字列定数には任意の文字を含めることができますが、例外として、文字列定数内にアポストロフィが必要な場合は 2 つのアポストロフィとして記述します。次に例を示します。
'He said, "I''m fine."'
Open PL/I では、二重引用符 (") で区切られた文字列定数もサポートされています。次に例を示します。
"He said, ""I'm fine."""
Open PL/I では、文字列定数の最大サイズは 256 文字 (ビット) です (詳細については「Open PL/I コンパイラの実装限度」を参照)。コンパイラは、B2、B3、または B4 フォーマットで書き込まれたビット文字定数が展開されると、この制限を確認します。浮動小数点データおよび固定小数点データの最大サイズの制限については、『Open PL/I ユーザー ガイド』の「Language Concepts」の章にあるデータ型の説明を参照してください。
名前付き定数は、適切なデータ属性および BYVALUE 属性を含むスカラー宣言に似ています。BYVALUE 属性はその識別子が名前付き定数であることを表し、他のすべての属性は宣言に適用されるものと見なされます。
名前付き定数は、宣言の属性が保持される点で単純な定数とは異なります。次に例を示します。
dcl i fixed bin (15) byvalue(1); dcl j fixed bin (15); J = 1; /* 1 is fixed dec, requires conversion */ J = I; /* I is fixed bin (15), no conversion (integer 1 assigned, not "i" ) */
文字列データ項目では、長さが指定されていない場合には文字列値の長さから長さが決定されます。
declare string char value ('abcdef') ; /* string is char(6) */
XN 定数は、16 進表記の SIGNED REAL FIXED BINARY 定数です。8 桁以下の場合は精度が 31 で、それを超えると精度が 63 になります。
XN 定数の 16 進値では、指定された値の左側に必要に応じて 16 進数のゼロが埋められます。次に例を示します。
'102'XN /* same as '00000102'XN with value 258 */ '9C40'XN /* same as '00009C40'XN with value 40,000 */ '7FFF'XN /* same as '00007FFF'XN with value 32,767 */
Open PL/I では、名前付き定数を算術データまたは文字列データとして宣言できます。ポインターおよびオフセットはまだサポートされていません。名前付き定数は、使用前に宣言することも、使用後に宣言することもできます。他の宣言と同じスコープ規則が適用されます。
cool: proc options(main); dcl pname char (16) byvalue (procedurename()); dcl flag bit(1) aligned static init(true); dcl true bit(1) byvalue ('1'b); dcl false bit(1) byvalue('0'b); dcl myarr (n) fixed bin (15); dcl n fixed bin(15) byvalue (800); dcl arr (k/3) fixed bin (15) static init (k+1, k, k+3); dcl arr1 (100+100) fixed bin (15); dcl arr2 (n+100) fixed bin (15); dcl i fixed bin (15); dcl k fixed bin (15) byvalue (9); if flag then put skip list ('Named Constants are ', pname); put skip list(arr); i = n + 100; arr1 (k) = 99; put skip list (size(arr1), size(arr2), i, arr1(K*2-K)); put skip list(arr); end; Named Constants are COOL 10 9 12 400 1800 900 99 10 9 12
算術定数、ビット定数、および 16 進定数は、見やすくするためにブレーク文字 ( _ ) で区切ることができます。次に例を示します。
'1100_1111'B は ***InsertTag***-OFF***InsertTag*** と同じです。'11001111'B
'F_E'B4 は ***InsertTag***-OFF***InsertTag*** と同じです。'fe'b4
16_666_667 は ***InsertTag***-OFF***InsertTag*** と同じです。16666667