оператор передачи данных
read(unit=10,*) i, array(i)
является допустимым, и его поведение соответствует желаемому: из записи сначала читается значение i
, затем это значение используется для идентификации элемента массива array(i)
для второго считанного значения.
Это требование спецификации Fortran, например, с (Fortran 2018, 12.6.4.5.1):
Все значения, необходимые для определения того, какие объекты заданы элементом списка ввода / вывода, определяются в начале обработки этого элемента.
Конечно, хотя этот оператор переноса данных потенциально работает, это не значит, что он желателен во всех случаях, кроме простейших случаев, когда вы доверяете входным данным. В частности, невозможно выполнить какую-либо проверку границ во время этого оператора чтения. Если считанное значение i
соответствует неверной спецификации элемента массива, программа не работает. Возможно, вы захотите использовать промежуточное значение для элемента массива просто для решения потенциальных проблем с входным файлом.