2016-02-03 5 views
0

GNU fortran manual section «10.5.2.126 Rename Intrinsic (function)» говорит «Из-за побочных эффектов, выполняемых этим внутренним, форма функции не рекомендуется».Переименовать() внутренние побочные эффекты функции?

С другой стороны, раздел «8.11.9.213 Rename Intrinsic (subroutine)» говорит: «Некоторые реализации, не связанные с GNU для Fortran, обеспечивают это внутреннее как функцию, а не как подпрограмму или не поддерживают (необязательный) аргумент состояния».

Таким образом, два вопроса:

  1. Каковы побочные эффекты Rename собственных (функции)?
  2. Какая форма предпочтительна для использования, если необходима переносимость?

ответ

3

Обратите внимание, что руководство, на которое вы ссылаетесь, очень устарело. Он имеет GCC 3, поэтому он действителен для g77 не для gfortran. Последняя версия находится здесь https://gcc.gnu.org/onlinedocs/gfortran/RENAME.html

Если требуется переносимость (от компилятора к компилятору), не используйте эту процедуру вообще, но вызывайте ОС для этого. Это будет отличаться для разных ОС. Например, на Linux

call EXECUTE_COMMAND_LINE('mv ' // trim(old) // ' ' // trim(new)) 

или SYSTEM() вместо этого, если EXECUTE_COMMAND_LINE() на старых компиляторов.

Побочный эффект - это действие переименования файлов. Нормальные внутренние функции чисты, и они (в основном) возвращают один и тот же ответ для одного и того же входа и не меняют никакого внешнего состояния. Побочным эффектом является любое действие, которое изменяет какое-либо внешнее состояние в дополнение к возврату возвращаемого значения функции.

Обратите внимание, что форма подпрограммы также имеет те же побочные эффекты. Но это не проблема. Ожидается, что подпрограммы будут иметь побочные эффекты.

Это по той же причине, почему RANDOM_NUMBER() является подпрограммой. Он имеет побочные эффекты изменения состояния случайного генератора. Нестандартная функция RAND() уродлива, потому что это функция с побочными эффектами.

+0

Спасибо! Действительно, было не так просто понять, что побочный эффект не является чем-то противоположным «главному эффекту». :)) – Roux

Смежные вопросы