2017-11-16 2 views
0

Ich weiß, dass die zirkuläre Abhängigkeit von Modulen in FORTRAN verboten ist. Aber ich frage mich, wie stark dieses Verbot ist. Lassen Sie uns sagen, ich habe:Können zwei FORTRAN-Module Teile voneinander verwenden?

module mod1 
    integer, public :: i,j,k 
    use mod2, only: m 
end module mod1 

und

module mod2 
    integer, public :: l,m,n 
    use mod1, only: j 
end module mod2 

Es scheint mir, dass diese Zirkularität in einem logischen Sinn ausweicht, aber das bedeutet nicht, die Standard es erlaubt. Sollte es funktionieren?

Wenn ja, habe ich Probleme beim Kompilieren, weil mod1 natürlich mod2 sehen möchte und umgekehrt. Gibt es einen Weg dahin?

+1

* Es scheint mir, dass dies Zirkularität in einem logischen Sinn * ausschließt; ach, nicht in einem Sinne, den der Fortran-Standard erkennt. Der offensichtliche (?) Workaround besteht darin, 'm' und' j' in ihre eigenen Module zu verschieben. –

+0

@HighPerformanceMark Ok, dann. Das ist der Stand der Dinge. Vielen Dank. –

+0

verwenden Sie bitte wirklich tag [tag: fortran], damit Leute Ihre Frage finden können. Ich habe das mehrmals gefragt. Fortran 90 ist eine alte, sogar veraltete Version. Sind Sie sicher, dass Ihre Frage darauf beschränkt ist? Auch wenn ja, verwenden Sie tag fortran und fügen Sie zusätzlich ein versionsspezifisches Tag hinzu. –

Antwort

2

Nein, es sollte nicht funktionieren. Der Standard besagt, dass ein Modul "verfügbar" sein muss, wenn ein USE gesehen wird. Wenn mod2 bis zu dem Zeitpunkt, zu dem "use mod2" angezeigt wird, nicht kompiliert wurde, schlägt der Build fehl. (Einige Compiler erlauben möglicherweise die Verwendung eines später definierten Moduls in der gleichen Quelle, andere nicht.) Möglicherweise können Sie Submodule verwenden (siehe https://software.intel.com/en-us/blogs/2015/07/07/doctor-fortran-in-we-all-live-in-a-yellow-submodule), um das zu erreichen, was Sie wollen - ich weiß nicht, weil Sie genau das gepostet haben nicht repräsentativ für Ihre reale Anwendung, aber Marks Vorschlag eines separaten Moduls ist leichter zu verstehen.

Verwandte Themen