带内部 goto 的 Fortran do 循环

发布于 2024-12-25 09:14:24 字数 1115 浏览 1 评论 0原文

我有一个 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...
}

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

I have a Fortran77 snippet that looks like this:

    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

When this hits the GOTO 1301 statement, does this jump to the next iteration of the loop or does it exit the loop?
As far as I understand the return keyword does nothing, so I assume that this will just exit the loop and continue code execution from label 1301, is that correct?

I am translating this to C# and am wondering if this is equivalent:

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...
}

or if I should have "continue" instead of "return"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百合的盛世恋 2025-01-01 09:14:24

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

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

Yes, the GOTO 1301 statement makes the program jump to next iteration.

The DO label, label CONTINUE is an obsolete way to write a more contemporary DO ENDDO block. In this case the loop will iterate over variables specified on the DO line, and label CONTINUE line serves as an "ENDDO" placeholder.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文