2017-10-07 4 views
1

Que signifie le * comme argument dans le sous-programme? Est-ce que ça veut dire une étiquette et ça revient au programme principal? est-il lié à return, return 1, ERR ou ERROR? Je ne sais pas pourquoi nous en avons, mais je pense que l'astérisque leur est apparenté.Que signifie le symbole astérisque * dans une liste d'arguments de sous-programme 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

Est-ce lié ...? https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vnb3/index.html – roygvib

+1

Veuillez utiliser [tag: fortran] pour toutes les questions Fortran pour obtenir plus d'attention. Comparez le nombre de suiveurs de tags [tag: fortran] et [tag: fortran95]. Votre question n'est pas spécifique à la version. –

+0

Nous pouvons essayer de le fermer, je peux déplacer ma réponse là-bas. Mais je ne peux plus installer celui-ci parce que j'ai dû modifier le tag. Beaucoup de gens viennent à la question, mais ils ne réparent pas les étiquettes. –

Répondre

4

C'est une étiquette pour le retour alternatif de la fonction. Il est l'étiquette où la fonction peut éventuellement revenir lors de l'utilisation

return 1 

au lieu de

return 

qui retourne à l'endroit d'où le sous-programme a été appelé.

Cette fonctionnalité est fortement déconseillée pour le nouveau code bien que j'ai vu une proposition sur la façon d'utiliser ce code pour un type d'exceptions.

question très liée, presque un double (demander la déclaration de retour à la place): Fortran return statement

+1

Il s'agit en fait d'une fonctionnalité FORTRAN 66. Il a été étiqueté comme "obsolète" depuis Fortran 90, mais reste dans la norme à partir de Fortran 2015. (Le comité a été plus réticent à supprimer des fonctionnalités, d'autant plus que les vendeurs se plaignent qu'ils doivent encore les supporter et les supprimer signifie pas de texte expliquant comment ils fonctionnent avec d'autres fonctionnalités.) –

+1

Si c'est du code, vous pouvez changer, refactoriser le retour alternatif dès que possible. C'est l'une des fonctionnalités de "tuer avec le feu" de F66 qui apparaît très rarement même dans l'ancien code; il ne devrait jamais être dans un nouveau code. Mieux vaut renvoyer un code d'état qui est géré par la routine d'appel. C'est une quantité insignifiante de code supplémentaire à écrire, mais c'est beaucoup plus clair. – arclight