Fortran返回声明

时间:2010-07-09 15:24:39

标签: fortran return

我正在尝试在gfortran下编译一些在g77下编译好的代码。问题似乎来自一个回复声明:

ffuncs.f:934.13:

  RETURN E
         1

错误:(1)处的备用RETURN语句需要SCALAR-INTEGER返回说明符

在代码中,任何E被指定为真实* 8:

IMPLICIT REAL * 8(A - H,O -Z)

然而,E从未被赋予价值或事实上你直到返回陈述才会看到它。我对Fortran几乎一无所知。带有fortran参数的return语句的含义是什么?

感谢。

3 个答案:

答案 0 :(得分:7)

在FORTRAN(直到Fortran 77,我非常熟悉)中,RETURN n不用于返回函数值;相反,它会像其他语言中的异常处理一样:退出到正常代码以外的代码位置。

您通常会将带有标签的SUBROUTINEFUNCTION称为参数,例如

  CALL MYSUB(A, B, C, *998, *999)
...
998 STOP 'Error 1'
998 STOP 'Error 2'

如果在MYSUB中出现问题,那么你执行RETURN 1RETURN 2(而不是正常的RETURN)并且你将在调用例程中直接跳转到标签998或999。

这就是为什么通常你想在RETURN上有一个整数 - 它不是一个值,而是一个你想要错误退出的索引。

RETURN E对我来说听起来不对。除非有我不知道的语法,否则以前的编译器应该将其标记为错误。

答案 1 :(得分:2)

在Fortran函数中,通过将值赋给伪变量来返回值,该伪变量与函数同名。一旦你这样做,只需返回。

答案 2 :(得分:2)

我认为@Carl Smotricz有答案。 ffuncs的参数列表是否具有星号的伪参数(以匹配调用中的星号标签)?或者这是否在没有替代回报的情况下使用?如果没有替代退货,只需删除“E”即可。如果有其他回报,那么最大的问题是程序在运行时之前所做的事情,因为变量属于错误类型且未初始化。如果变量没有与预期分支之一匹配的整数值,那么程序可能会采用常规返回分支 - 但这只是一个猜测 - 如果是这样,那么简单的解决方法是再次删除“E”。

“备用返回”功能被语言标准视为“过时”,可以在未来的标准中删除;如果由于遗留代码而被删除,编译器可能会继续支持它。对于新代码,一个简单的替代方法是返回一个整数状态变量,并在调用者中使用“select case”语句。