【发布时间】:2012-07-12 16:17:27
【问题描述】:
我正在尝试自学fortran,这样我就可以解开一个旧程序并将其重新用于我们自己的用途。我不知道这个语句是做什么的:
if(s - fm) 198, 198, 197
s - fm 不是一个可以为真或为假的条件,对吧?
当它把控制权交给标记为 198 的行时,它会继续到程序的结尾吗?它怎么知道什么时候回来执行 198 再执行 197?
【问题讨论】:
标签: if-statement fortran goto
我正在尝试自学fortran,这样我就可以解开一个旧程序并将其重新用于我们自己的用途。我不知道这个语句是做什么的:
if(s - fm) 198, 198, 197
s - fm 不是一个可以为真或为假的条件,对吧?
当它把控制权交给标记为 198 的行时,它会继续到程序的结尾吗?它怎么知道什么时候回来执行 198 再执行 197?
【问题讨论】:
标签: if-statement fortran goto
【讨论】:
这是 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; }
参考:wikibooks
【讨论】: