오랫동안 저는 Fortran을 사용 해왔고 최근 C를 배우기로 결심했습니다. C에서의 함수가 어떻게 작동하는지 알지만 C에서 Fortran 서브 루틴과 동일한 것을 구현하는 방법에 대한 정보를 찾는 데 어려움을 겪고 있습니다. C 언어로 모두? 서브 루틴에 대한C에서 서브 루틴이 Fortran과 유사한 서브 루틴이 있습니까?
module myMod
implicit none
contains
function func(a, b)
integer :: func
integer, intent(IN) :: a, b
func = a + b
end function func
subroutine sub(a, b, c)
integer, intent(INOUT) :: a, b
integer, intent(OUT) :: c
a = a * b
b = 3 * a
c = a + b
end subroutine sub
end module myMod
program example
use myMod
implicit none
integer :: i, j, k
i = 1
j = 2
k = func(i,j)
print*, k
call sub(i,j,k)
print*, i, j, k
end program example
C로 변환 할 사소한 것 모듈 mymod를의 기능을하지만 :
이 포트란 코드를 고려? 비슷한 일을하는 방법이 있습니까?편집 :
#include <stdio.h>
void subroutine(int num1, int num2) {
num1 -= 1;
num2 *= 2;
printf("this has been executed! \n");
}
int main() {
int a = 10;
int b = 10;
subroutine(a,b);
printf("a = %d, b = %d \n", a, b);
return 0;
}
그것은 출력 : 대신 예상의
this has been executed!
a = 10, b = 10
:
this has been executed!
a = 9, b = 20
예를 들어, 아래 코드는 내가 기대했던 출력되지 않는다
그럼 변수가 왜없는가요? a와 b는 포트란 서브 루틴처럼 void 함수에서 수정 되었습니까?
올바르게 이해한다면, 서브 루틴과 함수의 차이점은 (적어도이 예제에서) 서브 루틴이 둘 이상의 값을 반환 할 수 있다는 것입니다. C에서는 포인터를 사용하고 함수에'i, j, k' 포인터를 넘기 만하면 함수는 포인터를 통해 메모리 위치에 액세스하여 변수의 값을 변경할 수 있습니다. –
Fortran의 서브 루틴은 주 프로그램의 변수 값을 변경할 수 있습니다. –
"* 나는 C *를 배우기로 결심했다."라는 질문에 대한 답을 보려면 위의 "C"입문서에서 "address-of"연산자 ('&')와 "de-reference" "-operator ('*'), 일반적으로 포인터와 함께. – alk