关于fortran:DO循环中IF条件的奇怪标签用法

Strange label usage for an IF condition in a DO loop

本问题已经有最佳答案,请猛点这里访问。

我不确定哪个版本的Fortran是这段代码,我也不是很擅长,但是这是我尝试理解的代码...

1
2
3
4
5
6
7
8
      DO 55 J=1,N  
      IF(KODE(J)) 55,55,40  ! Can not figure out what this line does
   40 DO 50 I=1,N  
      CH=G(I,J)
      G(I,J)=-H(I,J)
      H(I,J)=-CH
   50 CONTINUE
   55 CONTINUE

在上面给出的循环中,您能否帮助我理解第二行的功能,特别是标签55,55,40

这是我试图理解的边界元素书中的代码...


哇...我已经有一段时间没有看到这种语法了。 那是一个Fortran算术IF语句。 KODE(J)的结果是一个数字。 如果小于零,则使用第一个跳转,如果等于零,则使用第二个跳转,否则,使用第三个跳转。 这大致相当于:

1
2
3
4
X=KODE(J)
IF (X.LT.0) GO TO 55
IF (X.EQ.0) GO TO 55
GO TO 40

我的Fortran技能已经大大降低,但这就是我所记得的。

在这种情况下,程序员编写起来更简单

1
2
3
X=KODE(J)
IF (X.LE.0) GO TO 55
GO TO 40

"算术if"语句是很早的Fortran的IF语句。 常规IF语句(也称为"逻辑" if)是在1962年于Fortran IV中引入的(http://en.wikipedia.org/wiki/Fortran#FORTRAN_IV)。 算术IF语句是很旧的代码(FORTRAN II!)的标志,或者是遵循这种样式的程序员的标志。

在Fortran 90中,"算术" If语句被列为"过时",以警告将来该功能可能会从该语言中删除。