【发布时间】:2012-11-14 11:20:42
【问题描述】:
我有一些旧的 Fortran 代码,我正在使用最新的 Windows 英特尔编译器(在 Visual Studio 中运行)重新编译这些代码。可悲的是,我的 Fortran 技能有点生疏了。
此特定代码使用数组来记录程序执行期间发生的任何问题。这个数组是这样声明的:
CHARACTER FAIL(25)*(255)
这里有一段代码检查这个数组,如果它找到一个以'F' 开头的元素(即'失败')会做一些事情
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 会返回什么?
【问题讨论】: