Удалось ли когда-нибудь Fortran обрабатывать списки аргументов подпрограмм произвольной длины, как это может сделать C? (Кстати, «настоящее» не сработает для того, что я пытаюсь сделать.) Спасибо.
@francescalus ОК. Спасибо.
Возможны ли (к счастью) вариативные аргументы одного типа? (например, все реалы и т. д.) Тогда мы сможем использовать аргумент массива (хотя и не общее решение ...)
@roygvib Вообще-то да, все аргументы должны быть одного типа. Предложения? Спасибо.
Ничего особенного, просто передача массива в виде «call mysub (arg1, arg2, [x1, x2, x3])» и т. д. И определение подпрограммы таким образом, чтобы третий аргумент (в данном случае) был объявлен как «реальный, намеренный (in) :: xs (:) "и т. д. Если мы хотим изменить фактические аргументы, может потребоваться создать независимый массив (не временный) и передать его таким же образом (здесь intent (in) не прилагается).
Для переменных аргументов всегда требуется дополнительный параметр для описания типа. Вы можете обойти это с помощью передаточных функций и массивов, но это довольно неуклюже. Необязательные аргументы могут быть тем, что вы ищете.





В Фортране таких подпрограмм нет.
Правило синтаксиса для оператора подпрограммы в Fortran 2008 (12.6.2.3, R1235):
[ prefix ] SUBROUTINE subroutine-name [ ( [ dummy-arg-list ] ) [ proc-language-binding-spec ] ]
где dummy-arg-list - это список (в терминах предполагаемых правил синтаксиса) dummy-arg. dummy-arg - это (R1235) либо название, либо буквальный *.
[Прежде чем мы будем слишком взволнованы возможностью вариативной поддержки, *, конечно, ссылается на индикатор альтернативный возврат.]
Список (R101) по-прежнему относится к четко определенному (во время источника) количеству элементов.
Существует заявленное ограничение относительно взаимодействия с C, которое (15.3.7) прототип C
... does not have variable arguments as denoted by the ellipsis (...)
Аналогичные аргументы применимы к функциям (Fortran).