Fortran中的Array First Index

tra*_*ilm 3 arrays fortran

我认为Fortran中数组的第一个索引是1.但为什么这个代码有效?(代码是Wavewatch的修改部分,http://polar.ncep.noaa.gov/waves/wavewatch/ )

DO KINDEX=0, TOTAL+1
NUM    = NUM * SCALE
SIG (KINDEX) = NUM
END DO
Run Code Online (Sandbox Code Playgroud)

Hig*_*ark 6

正如您已经被告知Fortran数组索引默认情况下是基于1的,但程序员可以选择用于索引值的整数类型范围内的任何整数.但是,你应该注意另一种皱纹.Fortran默认情况下不是在编译时(在许多情况下是不可能的)或在运行时(可能但是很昂贵),检查数组索引表达式是否在边界内.

这个问题在野外有很多Fortran代码,我遇到过一个程序工作的情况,显然是正确的,多年没有被发现.使用编译器的选项创建程序版本,该程序在运行时检查数组边界表达式,运行它并查看会发生什么.

或者,正如您已经被告知的那样,SIG可能已被宣布0为其最低指数.