Вы должны работать с очень старой копией книги Чепмена или, возможно, неправильно истолковывать то, что она говорит. Конечно, вызывающая процедура должна знать тип вызываемой функции, а в Fortran-before-90 ответственность программиста заключалась в том, чтобы гарантировать, что вызывающая функция имела эту информацию.
Однако, поскольку стандарт 90 и введение module
s есть другие и лучшие способы предоставления информации о вызываемой функции вызывающей процедуре. Одним из таких способов является включение вызываемых функций в модуль и use
-связать модуль. Когда ваша программа следует этому подходу, компилятор занимается вопросами. Это именно то, что сделал ваш код, и это не только правильно, это хороший подход в соответствии с современной практикой Фортрана.
association является стандартным для Fortran путь (ы), в котором имена (такие как fcn
) становятся связанными с объектами, такими как функция, называемая fcn
. use-association - это способ, реализованный путем записи use module
в программном модуле, тем самым делая все имена в module
доступными для устройства, которое использует module
. Простой оператор использования делает все объекты в модуле известными под их именами, определенными модулем. Оператор use
может быть изменен с помощью предложения only
, что означает, что доступны только некоторые модули. Отдельные объекты модуля могут быть переименованы в оператор use
, тем самым связывая другое имя с объектом модуля.
Сообщение об ошибке, которое вы получаете, если вы включаете (повторное) объявление типа вызываемой функции в вызывающей процедуре, возникает потому, что компилятор разрешает только одно объявление типа вызываемой функции.