BYVALUE

注: VALUE を BYVALUE の同意語として使用できます。

BYVALUE は、ENTRY 宣言で属性として使用することも、パラメーターに適用することもできます。

BYVALUE 属性は、次のタイプのパラメーターおよびパラメーター記述子にのみ適用できます。

Fixed Binary(n) n は 31 以下
Float Binary(n) n は 23 以下 (PL/I を呼び出す場合)
Float Binary(n) n は 52 以下 (PL/I 以外を呼び出す場合)
Aligned Bit(n) n は 32 以下
Character  
Pointer  
Entry  

BYVALUE 属性は、パラメーターではない変数に適用された場合は無視されます。

複数箇所に位置するパラメーターの場合 (パラメーターが特定のプロシージャの 1 つ以上の PROCEDURE 文および ENTRY 文に含まれている場合)、そのパラメーターには BYVALUE 属性が適用されないことがあります。

プロシージャを Open PL/I プロシージャから呼び出す場合、呼び出し先プロシージャで BYVALUE 属性を適用するのは、対応するパラメーター記述子が呼び出し元プロシージャの ENTRY 宣言でも BYVALUE として宣言されているパラメーターだけにする必要があります。次に例を示します。

P: PROCEDURE( A, B, Q);
DECLARE
   A FIXED BIN(31) BYVALUE,
   (B,C) FIXED BIN(15),
   Q POINTER BYVALUE,
   X FIXED BIN(15) BASED (Q);
B = A + 2; 
A = 2 * B; 
C = X;
ALLOCATE X SET(Q);
X = A + C; 
END;

この例では、A で渡される値に 2 が加算され、その値が B を介して呼び出し元プロシージャに返されます。A への 2 * B の代入は呼び出し元プロシージャには影響せず、CALL の最初の引数の値が呼び出し先プロシージャでの A への代入によって変更されることはありません。同様に、Q に対応する呼び出し元プロシージャの引数の値は ALLOCATE 文によって変更されません。