Fortran - 来自旧(1972)代码的双分支IF语句

时间:2011-01-22 18:50:14

标签: fortran

问候。有谁知道这个Fortran IF声明在做什么?

IF(IJJ-2) ,409,411

我认为这不是一个错字,因为在同一个程序中还有其他几个。我认为这是一个标准的算术IF,只是将“小于0”的分支默认为下一个exectutbale语句,但我不确定。我认为这段代码是在1970 - 1972年左右在CDC 6600上托管的。我查看了FORTRAN 77子集标准,但它指定必须提供所有三个语句标签。任何建议都非常感谢。

3 个答案:

答案 0 :(得分:5)

它被称为算术IF语句,在Fortran 90和95中已经过时。但是,我知道英特尔Fortran编译器仍然支持它。如果括号内的表达式小于零,则执行转移到第一个标签。如果等于零,那么第二个标签,最后如果大于零则转移到第三个标签。我不确定在缺少标签的情况下会发生什么 - 我认为它只是落空了。

因此,您的IF语句将转换为现代Fortran:

IF (IJJ == 2) THEN
    GOTO 409
ELSEIF (IJJ > 2) THEN
    GOTO 411
ENDIF

答案 1 :(得分:1)

我认为目的地行号小于,等于和大于零。 这看起来不像标准的fortran,但猜测缺少的行数会 直到下一个陈述。

答案 2 :(得分:0)

这绝对是非标准的Fortran。我查了一下,英特尔和GFortran编译器都不会接受它。许多Fortran编译器在F90之前都有非标准扩展。我记得DEC编译器有很多扩展。这是一个卖点!它还有助于确保客户忠诚度,因为使用这些扩展的代码无法移植到其他编译器。最好的办法是,如果你能找到编译器附带的手册,它应该记录下来。祝你好运!

作为一个历史性的旁注,我记得被告知当时的一些公司如此嫉妒他们的地盘,以及他们的非标准扩展给他们的优势,他们故意阻碍标准流程推迟下一个Fortran的版本(最终称为F90)。这使得其他语言获得了统治地位,并加速了Fortran的垮台。