2009-08-25 5 views
2

C에서 함수가 있습니다. Fortran에서이 함수를 호출하고 싶습니다. 이 함수는 포인터로 전달 된 두 개의 구조체를 포함합니다. Fortran에서 어떻게합니까?Fortran 구조 및 포인터

예 :

fun(*a,*b); 

가 어떻게 포트란에서이 호출을 수행합니다 C에서

struct a 
{ 
    int x; 
    float y; 
}; 

struct b 
{ 
    int p; 
    float q; 
}; 

? 여기서 a은 입력 구조이고 b은 출력 구조입니다. Fortran의 구조를 채울 수는 있지만 통과 한 후에는 데이터를 유지할 수 없습니다.

포트란에서 fun(*a,*b)으로 전화하는 방법은 무엇입니까?

답변

0

답변은 보유한 Fortran 버전에 따라 다릅니다. 예를 들어 gnu에서는 C_LOC 함수를 사용하여 주소를 가져올 수 있습니다.

1

최근 버전의 Fortran을 사용하는 경우 C를 직접 호출 할 수 있도록 구조 또는 레코드가 지원되어야합니다. Fortran77 이전 버전을 사용하는 경우 4 개의 인수를 취한 인터페이스 메소드를 C에서 작성하고 struct a의 내용을 나타내는 2 개를 사용하여 struct b를 나타내는 2를 작성합니다. 인터페이스 루틴은 입력 구조체의 채우기를 처리하고 출력 구조체의 결과를 인수로 가져옵니다. 메모리 할당 및 할당 해제와 관련된 잠재적 인 문제를 피하기 위해 최신 버전의 Fortran을 사용하여이 작업을 수행하고 싶습니다. 예를 들어 C에서 할당 된 메모리가 Fortran에 반환 된 경우 Fortran에서 할당을 해제 할 수 없습니다.