我在調用子程序時遇到了一些問題。首先,我可以在IF語句中調用子程序嗎?在另一個子程序中調用子程序
IF (...) THEN
...
ELSE
CALL sub1(...)
END IF
第二個問題。 Sub1自己調用sub2。然後sub2有來自主程序的輸入,比如說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
注:變量之間的加成是不準確的數學運算髮生
基本上每個變量依賴於彼此,但在x = y爲初始條件,我認爲是唯一的方法這可以工作。看起來sub2沒有在初始的x = y上進行拾取,然後當從sub1調用sub1時,sub1將其值賦給sub1。所以也許我不明白變量是如何傳遞的。我得到的錯誤不是編譯而是運行時錯誤,這導致我在sub1內調用sub2的那一行。任何幫助深表感謝。
請不要做出使現有答案無稽之談的更改。如果您對新代碼有新問題,請提出新問題。或者,如果你不確定他的答案,首先要求某人在評論中回答。 –
好的,如果你說它是在你的真實代碼中,我回到了你的改變,但是:1.不要發佈這樣的「簡化」代碼。 2.閱讀你所得到的答案和我所鏈接問題的答案。子程序中的'x'和'y'是局部變量。無論它們是隱式聲明還是用'real x,y'聲明它們都沒關係。它們仍然是子程序的局部變量。 –
並不意味着會造成混淆。我現在明白了,謝謝。 – Dtaai