J'ai récemment découvert la nouvelle fonctionnalité de Fortran 2008, à savoir SUBMODULE
s.Restriction de l'accès aux procédures de module à partir d'autres procédures de module
Veuillez jeter un oeil à mon exemple de travail minimum en bas de la question. Après la compilation, il met les éléments suivants sur le terminal:
Accessed sub0
Accessed sub1
Accessed sub2
C'est, comme il se doit, les procédures de module de sub1
et sub2
peuvent CALL
l'autre et tout est OK. Pour des raisons comme l'architecture de code et la maintenance, j'ai besoin de restreindre cet accès d'une manière ou d'une autre. Autrement dit, les procédures de module (sub1
et sub2
) sont invisibles l'une par rapport à l'autre. Puis-je le faire?
MODULE parent
PRIVATE
PUBLIC :: sub0
INTERFACE
MODULE SUBROUTINE sub1()
END SUBROUTINE
MODULE SUBROUTINE sub2()
END SUBROUTINE
END INTERFACE
CONTAINS
SUBROUTINE sub0()
PRINT *, 'Accessed sub0'
CALL sub1()
END SUBROUTINE
END MODULE
SUBMODULE (parent) submod1
CONTAINS
MODULE PROCEDURE sub1
PRINT *, 'Accessed sub1'
CALL sub2()
END SUBROUTINE
END SUBMODULE
SUBMODULE (parent) submod2
CONTAINS
MODULE PROCEDURE sub2
PRINT *, 'Accessed sub2'
END PROCEDURE
END SUBMODULE
PROGRAM driver
USE parent
CALL sub0()
END PROGRAM
Pourquoi ne pas simplement 2 modules séparés pour les 2 procédures? –
@VladimirF Oui bien sûr. C'est exactement ce que je fais maintenant. Mais, j'essaie de garder avec les nouvelles fonctionnalités modernes de Fortran comme «SUBMODULE». D'ailleurs, à ma connaissance, quelque chose comme Code Map en C# n'est pas disponible en Fortran, donc j'ai peur de travailler avec un énorme corpus de codes source (Debugging, Maintenance, et Développement). Essayé régime mentionné ci-dessus pour simplifier le contrôle de «APPEL» entre les procédures, mais cela semble être faux. – Shaqpad