Ich schreibe einen einfachen Demo-Code, um meine Frage schnell zu präsentieren. Hier ist der Code, der nicht erfolgreich erstellt werden kann.Deklarieren Sie das Argument in der ausgewählten Case-Struktur
Main.f90
PROGRAM test
IMPLICIT NONE
INTEGER :: a
a = 1
CALL sub(a)
END PROGRAM
sub.f90
SUBROUTINE sub(a)
IMPLICIT NONE
INTEGER :: a
SELECT CASE(a)
CASE(1)
INTEGER :: b,c
b = a
c = a*2
CASE(2)
INTEGER :: b(4),c(4)
b(:) = a
c(:) = a*2
END SELECT
END SUBROUTINE
Ich habe versucht, zu kompilieren, aber die 'Unerwartete Datendeklarationsanweisung' Fehler zeigt tritt in der Unterprogramm-Datei. Bedeutet es, dass ich den Argumenttyp nicht innerhalb der SELECT CASE-Struktur deklarieren kann? Das Problem ist, dass ich den Wert von a im Hauptprogramm definieren und in Subroutine sub (a) übergeben will. Der Argumenttyp von b und c sollte durch a entschieden werden, daher kann ich nicht vorher bestimmen. Ich möchte auch den Wert von b und c zurück an das Hauptprogramm übergeben, von dem ich nicht weiß, wie ich das machen soll. Wie kann ich das erreichen? Vielen Dank.
Haben Sie Zugang zu einem modernen Fortran (2008+) Compiler? Wenn dies der Fall ist, können Sie das Konstrukt "Block" verwenden. – jlokimlin
Danke. Ich versuche tatsächlich einige Änderungen an einem Programm mit Fortran 90 vorzunehmen, also möchte ich es auf diese Weise behalten, um mögliche Probleme zu vermeiden. – Ruizhi
Ich verstehe deine Position nicht. Jedes standardkonforme Fortran-90-Programm, das keine gelöschten Features verwendet (fast niemand verwendete sie, da sie bereits als veraltet deklariert wurden) bleibt Fortran 2015 konform. Bedenken Sie, dass Fortran 90 fast 3 Jahrzehnte alt ist und nicht viele unterstützt moderne Programmierpraktiken. Welchen Compiler benutzen Sie? – jlokimlin