关于可选参数的用法,我有以下问题。我们假设我在模块aaa
m_aaa
MODULE m_aaa
SUBROUTINE aaa(a, b)
INTEGER :: a
INTEGER, OPTIONAL :: b
END SUBROUTINE
END MODULE
现在我有第二个使用模块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
感谢您的帮助。
答案 0 :(得分:8)
在将其作为实际参数传递给另一个可选的伪参数之前,没有必要检查是否存在可选的伪参数。
12.5.2.12第4段(ISO / IEC 1539-1(2010年6月7日草案),又名Fortran 2008)允许这是关于不存在的可选实际参数:
除非在上面的列表中指出,否则它可以作为与可选虚拟对应的实际参数提供 论证,然后也被认为不存在。