我有一些旧的 Fortran 代码,我正在使用最新的 Intel 编译器(在 Visual Studio 中运行)重新编译这些代码。可悲的是,我的 Fortran 技能有点生疏。
此特定代码使用数组来记录程序执行期间发生的任何问题。这个数组是这样声明的:
CHARACTER FAIL(25)*(255)
这是一段代码,它检查这个数组,如果它找到一个以'F'
(ie 'failed')开头的元素,它会做一些事情
DO 20 CNTERR = OERRNO,ERRNO
IF (FAIL(CNTERR)(1:1).EQ.'F') GOTO 9999
20 CONTINUE
几乎在所有情况下OERRNO
都ERRNO
为零,因此CNTERR
也将为零。我认为这意味着——因为 Fortran 使用基于 1 的数组——我正在查看一个不存在的元素。
使用 VS 中的默认“发布”配置,代码将毫无问题地编译和运行。它将编译但无法使用默认的“调试”配置运行。我认为,重要的区别在于“调试”设置了“检查数组和字符串边界”选项,即/check:bounds
.
我的问题:如果使用“发布”配置构建,代码似乎可以正确运行。但我是否正在做一件会咬我的严重坏事?当您请求越界数组元素时,Fortran 会返回什么?