2017-10-07 97 views
1

*表示子程序中的参数是什么意思?这是否意味着一个标签,它返回到主程序?它是否与return,return 1,ERRERROR?我不知道为什么我们有这些,但我认为星号与他们有关。Fortran子程序参数列表中的星号*符号的含义是什么?

!>Start the creation of boundary conditions for the equation set. 
SUBROUTINE BOUNDARY_CONDITIONS_CREATE_START(SOLVER_EQUATIONS,BOUNDARY_CONDITIONS,ERR,ERROR,*) 

!Argument variables 
INTEGER(INTG), INTENT(OUT) :: ERR !<The error code 
TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !<The error string 
!Local Variables 
TYPE(VARYING_STRING) :: LOCAL_ERROR 

ENTERS("BOUNDARY_CONDITIONS_CREATE_START",ERR,ERROR,*999) 

    IF(ASSOCIATED(BOUNDARY_CONDITIONS)) THEN 
     CALL FlagError("Boundary conditions is already associated.",ERR,ERROR,*999) 
    ELSE 
     IF(ASSOCIATED(SOLVER_EQUATIONS%SOLVER_MAPPING)) THEN 
     !Initialise the boundary conditions 
     CALL BOUNDARY_CONDITIONS_INITIALISE(SOLVER_EQUATIONS,ERR,ERROR,*999) 
     ELSE 
     LOCAL_ERROR="Solver equations solver mapping is not associated." 
     CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) 
     ENDIF 
    ENDIF 
    ENDIF 

EXITS("BOUNDARY_CONDITIONS_CREATE_START") 
RETURN 
999 ERRORSEXITS("BOUNDARY_CONDITIONS_CREATE_START",ERR,ERROR) 
RETURN 1 
END SUBROUTINE BOUNDARY_CONDITIONS_CREATE_START 
+0

这是有关...? https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnb3/index.html – roygvib

+1

请对所有Fortran问题使用[tag:fortran]以获得更多关注。比较标签追随者的数量[tag:fortran]和[tag:fortran95]。你的问题不是版本特定的。 –

+0

我们可以尝试关闭它,我可以在那里移动我的答案。但是我不能再打开这个标签,因为我不得不编辑标签。很多人都提到了这个问题,但他们没有修复标签。 –

回答

4

这是从功能的备用返回的标签。这是有关标签使用,而不是

return 

返回从中子程序被调用的位置

return 1 

当函数最终会返回。

对于新代码,强烈建议不要使用此功能,尽管我已经看到如何使用此代码来处理某种异常。

非常相关的问题,几乎是重复的(要求return语句代替):Fortran return statement

+1

它实际上是一个FORTRAN 66功能。自从Fortran 90以来,它已被标记为“过时”,但在Fortran 2015中保持标准。(委员会更不愿意实际删除功能,特别是因为供应商抱怨他们仍需要支持它们,删除意味着存在没有文字说明它们如何与其他功能配合使用。) –

+1

如果这是可更改的代码,请尽快重构备用返回。这是F66的“用火扼杀它”的特性之一,即使在旧代码中也很少出现;它不应该在新的代码中。最好返回一个由调用例程处理的状态码。这是一个微不足道的额外代码,但它远远更清晰。 – arclight

相关问题