多年前,我使用了 FORTRAN,最近我的任务是维护一个旧的 FORTRAN 程序 (F77)。以下代码不熟悉:
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS,
. ( BUFFER(BIX), BIX=1, NUM_WORDS )
回顾一些在线论坛发现,让我感到困惑的部分,即续行,是一个隐含的循环。由于我的程序在这里给我带来了麻烦,因此我想将其转换为传统的 DO 循环。转换它也可能会帮助下一个在 5 年后冷冷地捡起这个东西的穷人!无论如何,我对 DO 循环等效项的最佳猜测是
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
DO BIX=1, NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) BUFFER(BIX)
ENDDO
但是当我只做这个改变时,正在工作的测试用例停止工作。我仍然觉得这里发生的是两个不同的 READ(第一个获取 NUM_WORDS,第二个循环遍历数据),所以我尝试了一个不太剧烈的更改,将其转换为两个语句,但保留了隐含的循环:
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) NUM_WORDS
READ(FILE_LOG_UNIT, IOSTAT=FILE_STATUS) ( BUFFER(BIX), BIX=1, NUM_WORDS )
但是只是这种变化也会导致好的测试用例失败。在我的两个更改中,NUM_WORDS 的值都按预期通过,因此循环似乎是它失败的地方。
那么,原始隐含循环的等效 DO 循环是什么?还是我完全走错了路?
谢谢