Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

以下の例は、呼び込み側ブロックの内部および外部にある関数の呼び出しを示しています。

例 1

以下の例では、代入ステートメントに Sprod 関数への 参照が含まれています。

        Mainp: procedure;
               get list (A, B, C, Y);
 1             X = Y**3+Sprod(A,B,C);
 
 2      Sprod: procedure (U,V,W)
               returns (bin float(21));
               dcl (U,V,W) bin float(53);
               if U > V + W then
 3               return (0);
               else
 3               return (U*V*W);
         end Sprod;

 1 
Sprod が呼び出されると、引数 AB、および C はそれぞれ、  2  のパラメーター UV、 および W と関連付けられます。
 2 
RETURNS がプロシージャー・ステートメントに 指定されているので、Sprod は関数です。 これは、内部関数であるため、明示的な入り口宣言は必要ありません。 Sprod が外部関数であれば、 Mainp は RETURNS を指定した入り口宣言を含みます。
 3 
Sprod は、ゼロを戻すか、 または U*V*W が表す値を戻します。 制御は Mainp 内の式に戻されます。 戻り値は、関数参照の値として用いられ、式の計算は続きます。

例 2

      Mainp:  procedure;
              dcl Tprod entry (bin float(53),
                              bin float(53),
                              bin float(53),
                              label) external
                returns (bin float(21));
              get list (A,B,C,Y);
 1             X = Y**3+Tprod(A,B,C,Lab1);
      Lab1:  call Errt;
      end Mainp;
 1      Tprod:  procedure (U,V,W,Z)
                returns (bin float(21));
                dcl (U,V,W) bin float(53);
                declare Z label;

 2              if U > V + W then
                    go to Z;
 3              else
                    return (U*V*W);
         end Tprod;
 1 
Tprod が呼び出されると、 Lab1 はパラメーター Z と関連付けられます。
 2 
UV + W よりも大きい場合には、 Lab1 というラベルの付いた ステートメントで Mainp に制御を戻します。  1  の割り当て式の計算は、継続されません。
 3 
UV + W より大きくない場合には、 U*V*W は計算されて、通常の方法で Mainp に戻されます。  1  での割り当て式の計算は、引き続き行われます。

Tprod は外部プロシージャーであることに注意してください。 RETURNS が含まれている Mainp には明示的な入り口宣言があります。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)