FORTRAN编译器警告:过时的算术IF语句

时间:2012-05-25 17:33:31

标签: gfortran

我有一个gfortran错误:

Warning: Obsolete: arithmetic IF statement at (1) 

这是什么意思?在源(旧来源):

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

3 个答案:

答案 0 :(得分:0)

点击此处:

http://www.ibiblio.org/pub/languages/fortran/ch1-5.html

“算术IF被认为是有害的。”

您的陈述,

if (s12 - 1.0) 13, 13, 12是一个算术IF,被认为是错误的编程。

答案 1 :(得分:0)

算术是否是FORTRAN的特殊功能

它的工作原理如下。

 IF (expr) label1, label2, label3

如果表达式的值是

less than 0, jump to label1 
equal to 0, jump to label2
greater than 0, jump to label3

在较新的FORTRAN标准中,此功能已过时

在您的代码中,您可以将其替换为

      IF (s12 - 1.0 .gt. 0 ) GOTO 12
13    z = s1 / s12

答案 2 :(得分:0)

Quoth Wikipedia

“.. Fortran语句定义了三个不同的分支,取决于表达式的结果是否为负,零或正,按所述顺序......”

“..终于在Fortran 90中被标记为过时了。”