что означает аргумент "iostat" в открытом заявлении? - PullRequest
0 голосов
/ 09 января 2019

Меня смущает использование аргумента 'iostat' в открытом файле. Как уже говорилось, когда команда open завершается успешно, iostat получает значение 0.

open(unit=99, file='vel_zcor22.txt', status='old', iostat=ierr, err=100)
100 if(ierr .ne. 0) then
    print*, 'open file error'
endif   
print*, ierr 

Почему «iostat» не используется для обозначения состояния, а не «ierr». Как я понимаю оператор присваивания, ierr передает свое значение в iostat. Так какова роль 'ierr' в этой процедуре?

1 Ответ

0 голосов
/ 09 января 2019

В операторе open iostat=ierr использует iostat= в качестве спецификатора . Это не присвоение, передающее значение ierr в переменную iostat.

Так же, как при использовании ключевых слов в подпрограмме или ссылке на функцию (где call sub(a=x) связывает фактический аргумент x с фиктивным аргументом a), происходит больше:

используйте переменную ierr для хранения результирующего статуса оператора.

Итак, когда «iostat получает значение 0», в действительности происходит определение переменной ierr.

Вместо ierr вы можете использовать любое имя переменной, и обычно часто используется iostat:

open(..., iostat=iostat, ...)

Точно так же и другие части, которые вы видите, также не являются заданиями. То есть:

open(unit=99, file='vel_zcor22.txt', status='old', iostat=ierr, err=100)

может выглядеть как назначение, но все равно говорится:

открыть на блоке 99, этот файл со статусом 'old', передав управление в оператор с пометкой 100 в случае ошибки.

Это не установка переменной unit на 99 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...