Элементарные функции Фортрана против элементарных подпрограмм - PullRequest
8 голосов
/ 30 июля 2011

Fortan позволяет элементарным подпрограммам иметь аргументы intent (inout) и intent (out), но элементарным функциям разрешено только intent (in).

Почему это? Это просто стилистическое соглашение или есть что-то общее в вызове функций и вызове подпрограмм?

Другими словами,

Elemental Integer Function FOO(i)
  Integer, intent(in) :: i
    ...
  FOO=something
End Function

и

Elemental Subroutine FOO(i, v)
  Integer, intent(in)  :: i
  Integer, intent(out) :: v
    ...
  v=something
End Subroutine

& mdash; эти реализации FOO эквивалентно эффективны?

1 Ответ

6 голосов
/ 12 декабря 2011

Нет смысла иметь элементарную подпрограмму без хотя бы одного аргумента, помеченного как intent(out) или intent(inout), потому что вы должны как-то передать результат.Функция имеет возвращаемое значение, подпрограмма должна использовать свои аргументы.В Fortran 2008 элементарные процедуры AFAIK не должны быть чистыми, но трудно представить полезную элементную подпрограмму только через ее побочные эффекты.

...