ПРИМЕЧАНИЕ. Я все еще изучаю эту проблему - пожалуйста, пока не пытайтесь ее решить - ошибка может быть где-то еще
Я хотел бы, чтобы аргумент подпрограммы был НЕОБЯЗАТЕЛЬНЫМ, но этот аргумент также является массивом предполагаемой формы. Когда я пытаюсь скомпилировать модуль, содержащий эту подпрограмму, я получаю следующую ошибку:
PGF90-S-0189-Аргумент номер 3 для (подпрограмма): ассоциация скалярного фактического аргумента с фиктивным аргументом массива (местоположение)
Процедура выглядит так:
SUBROUTINE EXAMPLE(A, B, C)
IMPLICIT NONE
INTEGER, INTENT(IN) :: A, B
INTEGER, OPTIONAL, DIMENSION(:), INTENT(IN) :: C
INTEGER :: TEST
IF (PRESENT(C)) THEN
TEST=C(1)
PRINT *,TEST
ELSE
PRINT *,A,B
ENDIF
END SUBROUTINE EXAMPLE
Он содержится в модуле. Я получаю сообщение об ошибке, когда пытаюсь вызвать его только с двумя аргументами из подпрограммы, которая ИСПОЛЬЗУЕТ модуль.
Я нашел только один, возможно, связанный вопрос на форумах Portland Group здесь:
http://www.pgroup.com/userforum/viewtopic.php?t=624&sid=d76fdf8ca2bf4fc3109f4f49b1de0ad7
Ответ сводится к тому, что пользователь использует необязательный аргумент, который не был выделен - я не знаю, применимо ли это в моем случае, поскольку я не использую 'C' вне блока IF (PRESENT (C)), но может ли происходить неявное выделение при определении переменной как предполагаемой формы, которое не может быть выполнено, если оно изначально не передается?
optional
с манекеном заданной формы. Это не означает, что все варианты использования являются правильными, поэтому не могли бы вы предоставить MCVE для вашего проблемного случая? - person francescalus   schedule 28.03.2014