定数

定数とは、特定の変わらない値を表す文字のシーケンスです。Open PL/I では、次の 5 種類の定数を使用できます。

例:

定数 タイプ
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."""
注:

二重引用符は、単一引用符とも、2 つの隣接する単一引用符とも同等ではありません。定数内の他の文字と同様に、特別な意味はありません。

Open PL/I では、文字列定数の最大サイズは 256 文字 (ビット) です (詳細については「Open PL/I コンパイラの実装限度」を参照)。コンパイラは、B2、B3、または B4 フォーマットで書き込まれたビット文字定数が展開されると、この制限を確認します。浮動小数点データおよび固定小数点データの最大サイズの制限については、『Open PL/I ユーザー ガイド』の「言語の概念」の章にあるデータ型の説明を参照してください。

名前付き定数は、適切なデータ属性および 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 固定 2 進定数です。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 */

XU 定数は、16 進表記の UNSIGNED 固定 2 進定数です。8 桁以下の場合は精度が 32 で、それを超えると精度が 64 になります。

XU 定数の 16 進値では、指定された値の左側に必要に応じて 16 進数のゼロが埋められます。次に例を示します。
'102'XU /* same as '00000102'XU with value 258 */
'9C40'XU /* same as '00009C40'XU with value 40,000 */
'FFFF'XU /* same as '00007FFF'XU with value 65,535 */

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'11001111'B と同じです。

'F_E'B4'fe'b4 と同じです。

16_666_66716666667 と同じです。