9

オプション引数の使い方について、以下の質問があります。aaaモジュールで次のルーチンが定義されているとしましょうm_aaa

MODULE m_aaa
SUBROUTINE aaa(a, b)
  INTEGER           :: a
  INTEGER, OPTIONAL :: b
END SUBROUTINE
END MODULE

これで、モジュールを使用する 2 番目のルーチンができましたm_aaa。このようにオプションの引数を渡すことは可能ですか

! Variant 1:
SUBROUTINE bbb(c, d)
  USE m_aaa 
  INTEGER           :: c
  INTEGER, OPTIONAL :: d
  CALL aaa(c,d)
END SUBROUTINE  

または、次のようにオプションの引数 d の存在を確認する必要があります:

! Variant 2:
SUBROUTINE bbb(c, d)
  USE m_aaa 
  INTEGER           :: c
  INTEGER, OPTIONAL :: d
  IF (PRESENT(d)) THEN
    CALL aaa(c,d)
  ELSE
    CALL aaa(c)
  ENDIF
END SUBROUTINE  

ご協力いただきありがとうございます。

4

1 に答える 1

11

別のオプションの仮引数に実引数として渡す前に、オプションの仮引数の存在をチェックする必要はありません。

これは、存在しないオプションの実引数に関して、12.5.2.12 パラグラフ 4 (ISO/IEC 1539-1 (2010 年 6 月 7 日ドラフト) 別名 Fortran 2008) で許可されています。

上記のリストに記載されている場合を除き、オプションの仮引数に対応する実引数として指定することもできますが、仮引数は存在しないと見なされます。

于 2014-10-14T19:25:03.517 に答える