0
У меня возникла проблема с использованием необязательных аргументов. У меня есть две процедуры num_to_str
и qry
, которые принимают формат fm
в качестве необязательного аргумента. Когда я звоню qry ("lc")
, хотя fm
нет, подпрограмма num_to_str
думает, что есть fm
.Fortran Cascading Дополнительные аргументы
Call qry ("lc")
Subroutine qry (lb, fm)
Character (Len=*), Intent (In), Optional :: lb, fm
Real :: n
Character (Len=65) :: s
n = 90.0
Call num_to_str (n, s, fm)
End Subroutine
Subroutine num_to_str (nb, s, fm)
Real, Intent (In) :: nb
Character (Len=*), Intent (In) :: s
Character (Len=*), Intent (In), Optional :: fm
fmt = "*"
if (Present (fm)) fmt = Trim (fm)
End Subroutine
Являются ли явные интерфейсы доступными для обеих подпрограмм в областях, в которых они ссылаются? – IanH
'num_to_str' находится в модуле' core', тогда как 'qry' находится в модуле' решетка'. 'Present (fm)' в 'qry' возвращает' T', однако, когда я пытаюсь напечатать 'fm', я получаю неверную ссылку на память. – Zeus
Какие параметры компилятора/компиляции? Для показанного примера кода (примечание: для 'fmt' отсутствует объявление)' present (fm) 'не должно быть true. – IanH