Fortran read 语句读取顺序
Fortran read statement reading sequence
假设我有一个文件,每一行都包含一个数组索引,后跟数组值
i array(i)
我可以通过天真的 read(unit=10, *) i, array(i)
读取数据吗? Fortran会不会总是先读取i
然后用这个i
赋值给array(i)
?某些 read
规范或编译器标志会影响行为吗?
数据传输语句
read(unit=10,*) i, array(i)
是合法的,它的行为符合预期:首先从记录中读取 i
的值,然后该值用于标识数组 array(i)
的元素读取的第二个值。
这是 Fortran 规范的要求,例如 with (Fortran 2018, 12.6.4.5.1):
All values needed to determine which entities are specified by an input/output list item are determined at the beginning of the processing of that item.
当然,尽管此数据传输语句可能有效,但这并不意味着它在您信任输入数据的最简单情况之外的所有情况下都是可取的。特别是,在此读取语句期间不可能对边界进行任何检查。如果读取的 i
值对应于无效的数组元素规范,则程序将被破坏。您可能只想对数组元素使用中间值来处理输入文件的潜在问题。
假设我有一个文件,每一行都包含一个数组索引,后跟数组值
i array(i)
我可以通过天真的 read(unit=10, *) i, array(i)
读取数据吗? Fortran会不会总是先读取i
然后用这个i
赋值给array(i)
?某些 read
规范或编译器标志会影响行为吗?
数据传输语句
read(unit=10,*) i, array(i)
是合法的,它的行为符合预期:首先从记录中读取 i
的值,然后该值用于标识数组 array(i)
的元素读取的第二个值。
这是 Fortran 规范的要求,例如 with (Fortran 2018, 12.6.4.5.1):
All values needed to determine which entities are specified by an input/output list item are determined at the beginning of the processing of that item.
当然,尽管此数据传输语句可能有效,但这并不意味着它在您信任输入数据的最简单情况之外的所有情况下都是可取的。特别是,在此读取语句期间不可能对边界进行任何检查。如果读取的 i
值对应于无效的数组元素规范,则程序将被破坏。您可能只想对数组元素使用中间值来处理输入文件的潜在问题。