Fortran使用内部goto进行循环

时间:2012-01-05 06:27:31

标签: fortran fortran77

我有一个看起来像这样的Fortran77代码段:

    DO 1301 N=NMLK-2,2,-1                                                     
       Some code...
       IF(NB1(N).EQ.50) GOTO 1300                                                            
       Some code...
       IF(BS(N).EQ.0.0) GOTO 1301                                                
       some code...                                                               
       GOTO 1301                                                                 
  1300 NW(M)=NB1(N)                                                              
       Some code...                                                               
  1301 CONTINUE

当它击中GOTO 1301语句时,这会跳转到循环的下一次迭代还是退出循环? 据我所知,return关键字什么都不做,所以我假设这只是退出循环并继续从标签1301执行代码,这是正确的吗?

我正在将其翻译成C#,我想知道这是否相同:

for (N = NMLK; N >= 2; N--)
{
    Some code...
    if (NB1[N] == 50)
        goto l1300;
    Some code...
    if (BS[N] == 0)
        return;
    Some code...
    return;
l1300:
    NW[M] = NB1[N];
    Some code...
}

或者我应该“继续”而不是“返回”?

1 个答案:

答案 0 :(得分:10)

是的,GOTO 1301语句使程序跳转到下一次迭代。

DO labellabel CONTINUE是编写更现代DO ENDDO块的过时方式。在这种情况下,循环将迭代DO行上指定的变量,label CONTINUE行充当“ENDDO”占位符。