Нужно ли проверять необязательный аргумент, прежде чем передать его другому необязательному аргументу?

У меня есть следующий вопрос относительно использования необязательного аргумента. Допустим, у меня есть следующая процедура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  

Спасибо за вашу помощь.

Ответы на вопрос(1)

Ваш ответ на вопрос