2

我正在尝试自学fortran,这样我就可以解开一个旧程序并将其重新用于我们自己的用途。我无法弄清楚这个语句的作用:

if(s - fm) 198, 198, 197

s - fm不是可以为真或假的条件,对吗?

当它把控制权交给标记为 198 的行时,它会继续到程序的结尾吗?它怎么知道什么时候回来执行 198 再执行 197?

4

2 回答 2

8

这是 IF 的“古老”形式:

IF (''arithmeticExpression'') ''firstLineNumber'', ''secondLineNumber'', ''thirdLineNumber''

在第二种形式中,计算算术表达式。如果表达式的计算结果为负数,则从第一行号继续执行。如果表达式的计算结果为零,则在第二行号处继续执行。否则,在第三行号处继续执行。

根据表达式的符号,这是一个“三向 goto”。

在更传统的类 C 语言中,它是

/* IF(a) label1, label2, label3 */

if(a > 0)
{
   goto label3;
} else
if(a < 0)
{
   goto label1;
} else
{
   // a == 0
   goto label2;
}

您的案例包含两个标签 198,其工作方式类似于

if(s <= fm) { goto lbl198; } else { goto lbl197; }

参考:维基书

于 2012-07-12T20:20:20.800 回答
3

这个过时的功能让很多人感到困惑:

FORTRAN 编译器警告:过时的算术 IF 语句

Fortran 奇怪的 IF

奇怪的标签用法

于 2012-07-12T20:56:03.603 回答