Как и в случае Alexander Vogt says, интерфейсные блоки могут быть полезны для предоставления общих идентификаторов и разрешения определенных проверок компилятора.
Если вы используете интерфейсные блоки для создания общих идентификаторов, вы, вероятно, делаете это в рамках модулей, поэтому основная причина написания таких блоков, когда модули не предназначены для явных интерфейсов, которые они создают в области в которые они происходят. Именно они позволяют выполнять эти проверки компилятора, а связь с модулями больше не происходит.
Однако есть моменты, когда требуется явный интерфейс, а не как тонкость: если ссылаться на процедуру с определенными функциями, то для вашего кода будет соответствовать явный интерфейс, соответствующий стандарту Fortran. Эти особенности могут быть найдены в F2008, 12.4.2.2
Процедура, кроме функции заявления должны иметь явный интерфейс, если он ссылается и
- появляется ссылка на процедуру
(а) с аргументом ключевого слова (12.5.2), или
(б) в контексте, который требует, чтобы это было чистым,
- процедура имеет фиктивный аргумент, что
(а) имеет ALLOCATABLE, АСИНХРОННОМ, необязательный, УКАЗАТЕЛЬ , TARGET, ЗНАЧЕНИЕ, или летучий атрибут,
(б) представляет собой массив предполагаемой формы,
(с) представляет собой coarray,
(г) параметризованного производного типа, или
(е) является полиморфным ,
- процедура имеет результат, который
(а) представляет собой массив,
(б) представляет собой указатель или размещаемый или
(с) имеет nonassumed значение параметра типа, который не является постоянным выражением,
- процедура элементная, или
- процедура имеет атрибут BIND.
Помимо тех, неявный интерфейс будет достаточно, и interface
блок не требуется. Но все же может помочь.
В вашем случае это только для вызовов между различными компонентами Fortran, где эти интерфейсы имеют такое влияние. Таким образом, вам не всегда нужно писать интерфейсы, и некоторые вещи могут работать без них.
Невозможно ли вызвать функцию фортрана в модуле непосредственно из R, связав bind («c», name = ...)? – roygvib
Я начал изучать этот материал пару дней назад. Можете ли вы указать мне пример? В этом вопросе я попытался использовать модуль и не смог http://stackoverflow.com/questions/31395435/use-fortran-subroutine-in-r-undefined-symbol/31396583#31396583 Большое спасибо! – Ignacio
У меня была некоторая удача, предлагающая C-совместимые процедуры (затем называемые R) в модуле Fortran, но это, вероятно, новый вопрос, если ваши эксперименты не работают. Но я в основном предполагал, что этот вопрос касается вызовов R-Fortran-Fortran и интерфейсов для этой последней части цепочки. – francescalus