我在调用子程序时遇到了一些问题。首先,我可以在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