Ich habe einige Probleme beim Aufruf von Subroutinen. Zuallererst, darf ich eine Subroutine innerhalb einer IF-Anweisung aufrufen?Aufruf einer Unterroutine in einer anderen Unterroutine
IF (...) THEN
...
ELSE
CALL sub1(...)
END IF
Zweite Frage. Sub1 ruft sub2 in sich auf. Dann hat sub2 eine Eingabe vom Hauptprogramm, sagen wir mal x.
MODULE mod1
...
CONTAINS
SUBROUTINE sub1(w)
IMPLICIT NONE
INTENT(OUT) :: w
REAL :: x, z
CALL sub2(x, z)
w = z + 1
END SUBROUTINE sub1
SUBROUTINE sub2(x, z)
IMPLICIT NONE
INTENT(IN) :: x
INTENT(OUT) :: z
z = x + 1
END SUBROUTINE sub2
END MODULE mod1
PROGRAM prog
USE mod1
IMPLICIT NONE
IF (...) THEN
...
ELSE
x = y
CALL sub1(w)
x = w + y
END IF
END PROGRAM prog
HINWEIS: Die Zugabe zwischen Variable ist nicht die genaue mathematische Operation statt
Grundsätzlich kann jede Variable aufeinander ab, aber die x = y ist die erste Bedingung, die ich denke, der einzige Weg ist, das könnte funktionieren. Es scheint, dass das Sub2 nicht das anfängliche x = y aufnimmt, das dann seinen Wert an sub1 gibt, wenn es von sub1 aufgerufen wird. Vielleicht verstehe ich nicht, wie die Variablen herumgereicht werden. Die Fehler, die ich bekomme, sind nicht beim Kompilieren, sondern ein Laufzeitfehler, der mich zu der Zeile führt, wo ich Sub2 innerhalb von Sub1 anrufe. Jede Hilfe wird sehr geschätzt.
Bitte machen Sie keine Änderungen, die bestehende Antworten Unsinn machen. Wenn Sie eine neue Frage mit einem neuen Code haben, stellen Sie eine neue Frage. Oder fragen Sie jemanden, der in einem Kommentar geantwortet hat, wenn Sie sich nicht sicher sind, was er gesagt hat. –
Ok, ich habe mich zu Ihrer Änderung gewendet, wenn Sie sagen, dass es in Ihrem echten Code ist, aber: 1. Poste niemals solchen "vereinfachten" Code. 2. Lesen Sie die Antwort, die Sie erhalten haben, und die Antworten auf die Frage, die ich verlinkt habe. Die "x" und "y" in der Subroutine sind lokale Variablen. Es spielt keine Rolle, ob sie implizit deklariert werden oder Sie deklarieren sie mit 'real x, y'. Sie sind immer noch lokale Variablen des Unterprogramms. –
Ich wollte nicht Verwirrung stiften. Ich verstehe jetzt, danke. – Dtaai