问题
I have a gfortran error:
Warning: Obsolete: arithmetic IF statement at (1)
What does this mean? In the source (old source):
66 s12 = max(epsilon, s1 + s2)
c Then execution will go to label 13. Will this stop any further problems?
if (s12 - 1.0) 13, 13, 12
13 z = s1 / s12
回答1:
Arithmetic if is a peculiar feature of FORTRAN
it works as follows.
IF (expr) label1, label2, label3
If the value of the expression is
less than 0, jump to label1
equal to 0, jump to label2
greater than 0, jump to label3
In newer FORTRAN standards this feature is obsolete
In your code you can replace it with
IF (s12 - 1.0 .gt. 0 ) GOTO 12
13 z = s1 / s12
回答2:
Check here:
http://www.ibiblio.org/pub/languages/fortran/ch1-5.html
"The Arithmetic IF is considered harmful."
Your statement,
if (s12 - 1.0) 13, 13, 12
is an Arithmetic IF, and is considered bad programming.
回答3:
Quoth Wikipedia:
"..the Fortran statement defines three different branches depending on whether the result of an expression was negative, zero, or positive, in said order..."
"..was finally labeled obsolescent in Fortran 90."
来源:https://stackoverflow.com/questions/10758935/fortran-compiler-warning-obsolete-arithmetic-if-statement