Fortran IF statement with numbers/labels rather th

2019-01-09 15:35发布

What does this Fortran code mean:

   IF (J1-3) 20, 20, 21
21 J1 = J1 - 3
20 IF (J2-3) 22, 22, 23
23 J2 = J2 - 3
22 CONTINUE

I've seen in old project and I don't have any idea what this IF with numbers (labels) means.

1条回答
欢心
2楼-- · 2019-01-09 16:40

This is an arithmetic if statement from FORTRAN 77. Adapted from the FORTRAN 77 specification (emphasis mine):

The form of an arithmetic IF statement is:

IF (e) s1 , s2 , s2

  • where: e is an integer, real, or double precision expression

  • s1, s2, and s3 are each the statement label of an executable statement that appears in the same program unit as the arithmetic IF statement. The same statement label may appear more than once in the same arithmetic IF statement.

Execution of an arithmetic IF statement causes evaluation of the expression e followed by a transfer of control. The statement identified by s1, s2, or s3 is executed next as the value of e is less than zero, equal to zero, or greater than zero, respectively.

For the example in your question, from the last sentence above,

  • If J1-3 < 0 statement 20 will be executed
  • If J1-3 = 0 statement 20 will also be executed
  • If J1-3 > 0 statement 21 will be executed

Edit: A modern and much more readable way to write this would be:

if (J1-3 > 0) J1 = J1 - 3
if (J2-3 > 0) J2 = J2 - 3
查看更多
登录 后发表回答