서브 루틴 호출에 문제가 있습니다. 우선, 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 내에서 sub2라고 부르는 선으로 연결됩니다. 어떤 도움이라도 대단히 감사합니다.
기존 답변을 말도 안하는 변경하지 마십시오. 새로운 질문으로 새로운 질문을하면 새로운 질문을하십시오. 또는 자신의 대답에 대해 확신이없는 경우 먼저 다른 사람에게 의견을 말하도록 요청하십시오. –
사실, 실제 코드에 있다고 말하면 변경 사항을 되돌려 놓았지만 : 1. "단순화 된"코드를 게시하지 마십시오. 2. 내가 가지고있는 해답과 내가 연결된 질문에 대한 해답을 읽으십시오. 서브 루틴의'x'와'y'는 지역 변수입니다. 암시 적으로 선언되었거나'real x, y'로 선언하면 상관 없습니다. 그것들은 여전히 서브 루틴의 로컬 변수입니다. –
혼란을 야기하지는 않았다. 이해합니다, 고마워요. – Dtaai