文:サブルーチン副プログラムに制御を移します。
形式
CALL sub [( [a-arg [, a-arg] ...] )]
sub
サブルーチン副プログラムの名前。
a-arg
省略可能な [keyword=] が前に付けられた実引数。keyword は,サブルーチンの明示的インタフェース中の仮引数の名前です。手続が呼び出された時点で,キーワードに値が代入されます。
個々の実引数は,変数,式,手続の名前,または選択戻り指定子でなくてはなりません (内部手続や文関数の名前,または手続の総称名であってはなりません)。
選択戻り指定子は,星印 (*) か,アンド記号 (&) の後に CALL 文と同じ有効域中にある実行文の飛び先文の文番号を続けたものです (選択戻り値は Fortran 95 と Fortran 90 の廃止予定事項です)。
規則と振る舞い
CALL 文が実行されると,実引数並び中のすべての式が評価された後に,サブルーチン中の最初の実行文または実行構文に制御が渡されます。サブルーチンが実行を終えると,制御は CALL 文に続く次の実行文か,選択戻り値文番号 (存在する場合) によって識別された文に戻ります。
引数並びが宣言されている場合,個々の実引数に,引数並び中の位置,またはキーワードの名前によって,対応する仮引数が結合されます。引数の型と種別パラメタは一致していなくてはなりません。
位置引数と引数キーワードの両方を宣言する場合,引数キーワードは実引数並びの末尾に置かなくてはなりません。
仮引数が省略可能である場合,実引数を省略することができます。
仮手続と結合される実引数は,手続の個別名か,別の仮手続でなくてはなりません。一部の組込み関数名は実引数としては使用できません (「実引数として許されていない関数:表」を参照)。
関数が以下の型の 1 つではない限り,CALL 文を使って関数を呼び出すことができます。
REAL(8)
REAL(16) (VMS, U*X)
COMPLEX(8)
COMPLEX(16) (VMS, U*X)
CHARACTER
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
CONTAINS,RECURSIVE,SUBROUTINE,USE,プログラム単位と手続
例
次の例は,有効な CALL 文を示しています。
CALL CURVE(BASE,3.14159+X,Y,LIMIT,R(LT+2)) CALL PNTOUT(A,N,'ABCD') CALL EXIT CALL MULT(A,B,*10,*20,C) ! 星印とアンド記号は CALL SUBA(X,&30,&50,Y) ! 選択戻り値を示しています。
次の例は,引数キーワードを取るサブルーチンを示しています。
PROGRAM KEYWORD_EXAMPLE INTERFACE SUBROUTINE TEST_C(I, L, J, KYWD2, D, F, KYWD1) INTEGER I, L(20), J, KYWD1 REAL, OPTIONAL :: D, F COMPLEX KYWD2 ... END SUBROUTINE TEST_C END INTERFACE INTEGER I, J, K INTEGER L(20) COMPLEX Z1 CALL TEST_C(I, L, J, KYWD1 = K, KYWD2 = Z1) ...
最初の 3 つの実引数は,その位置によって,対応する仮引数と結合されます。引数キーワードはキーワード名によって結合されるので,任意の順序で宣言することができます。
サブルーチン TEST へのインタフェースは,CALL 文で省略された 2 つの省略可能引数を持っていることに注意してください。
次に,引数キーワードを使用したサブルーチン呼び出しの例をもう 1 つ示します。
CALL TEST(X, Y, N, EQUALITIES = Q, XSTART = X0)
最初の 3 つの引数は位置によって結合されます。
以下に別の例を示します。
! 様々なサブルーチン呼び出し REAL S,T,X INTRINSIC NINT S=1.5 T=2.5 X=14.7 ! これは,キーワードを使って SUB1 を呼び出します。MINT は組込み関数です。 CALL SUB1(B=X,C=S*T,FUNC=NINT,A=4.0) ! これは,暗黙の引用を使った同じ呼び出しです。 CALL SUB1(4.0,X,S*T,NINT) CONTAINS SUBROUTINE sub1(a,b,c,func) INTEGER func REAL a,b,c PRINT *, a,b,c, func(b) END SUBROUTINE END