2017-10-07 93 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

相關問題