【问题标题】:Confusion about "do-continue" and "go to-continue" in FORTRANFORTRAN 中对“继续”和“继续”的混淆
【发布时间】:2013-02-06 21:45:36
【问题描述】:

大家的坏消息,

我最近开始学习 FORTRAN 来理解代码并将其翻译成 C++(I
知道代码的作用对于这个问题并不重要,但要提供一些背景知识,
此代码使用自适应网格上的搭配方法解决边界值问题)。
查看代码,有某些“go to”语句与“do continue”结合使用
这真的让我很困惑。

这是一个例子:

do 100 i=1, n
    C DO SOMETHING HERE
    if (some condition) go to 90
    C DO SOME MORE STUFF HERE
    90 continue
    C EVEN MORE STUFF HERE
100 continue

我有一些 C 编程经验,所以我将用 C 编写我的两种解释
如下,但我不确定哪一个(如果有的话!)是正确的翻译:

for(int i=1;i<=n;i++)
{
    //DO SOMETHING HERE
    if(some condition) continue;
    //DO SOME MORE STUFF HERE
    //EVEN MORE STUFF HERE
}

或:

for(int i=1;i<=n;i++)
{
    //DO SOMETHING HERE
    if(!some condition)
    {
        //DO SOME MORE STUFF HERE
    }
    //EVEN MORE STUFF HERE
}

我想知道是否有人可以帮助我理解语法。

【问题讨论】:

    标签: fortran77 do-loops


    【解决方案1】:

    Fortran 的continue 语句什么都不做。它只是作为跳转的参考。在您的 Fortran 代码中,如果 some conditiontrue,程序将跳过 DO SOME MORE STUFF HERE。因此,您的第二个 C 版本是正确的。

    【讨论】:

    • 谢谢。那么使用“if-go to”而不是“if .not.-endif”只是一种风格偏好吗?
    • 它具有相同的效果,但我不会将其称为样式问题:“GOTO some label”语句的问题是带有标签的代码很难维护,因为您的程序可以跳转到来自程序中任何位置的带有标签的语句,它允许您编写完全非结构化的代码,请参阅 Dijkstra 的信“Go To Statement Considered Harmful”en.wikipedia.org/wiki/Considered_harmful>
    • web.archive.org/web/20090320002214/http://www.ecn.purdue.edu/… kerneltrap.org/node/553/2131 ... 代表对方。 GOTO 不好也不坏。这只是一个声明。
    • @ldigas 作为一个没有乐趣调试其他人的代码的人说话。从历史角度来看,早期(77 年前)fortran 没有 if then 构造。 if-goto 形式表示非常古老的代码或至少是由比我年长的人编写的代码..
    猜你喜欢
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多