BYVALUE は、ENTRY 宣言で属性として使用することも、パラメーターに適用することもできます。
BYVALUE 属性は、次のタイプのパラメーターおよびパラメーター記述子にのみ適用できます。
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 文によって変更されません。