1

Fortran 2003에서 할당 할 수있는 배열은 이 아니고은 C와 상호 운용되지 않습니다. 이것은 메모리에 저장된 추가 배열 정보와 관련이 있으며 C 해석을 방해 할 수 있다고 생각합니다.Fortran2003에서 C와 상호 운용 가능한 1D 가정 형 배열입니다?

그러나 1D가 모양 배열을 가정 할 때 임시 인수를 선언하면 어떻게 될까요? 예를

subroutine outter_subroutine(ma, size_ma) 
integer :: size_ma 
integer :: ma(size_ma) 

call fortran_subroutine(ma) 

end subroutine 

!----------------------------- 

subroutine fortran_subroutine(a) 
integer, intent(in) :: a(:) 
integer,(kind=c_int):: ierr 
... 
ierr = some_c_function(a) 
... 
end subroutine 

에 대한 포트란의 인터페이스는 C에있는 동안

interface 
function some_c_function(a) 
integer(c_int) :: a(*) 
end interface 

, 포트란 2003 표준을 준수 프로토 타입 어쩌면

int some_c_function(int *a) 

뜻을 같이 할 수있다?

답변

2

C 상호 운용 가능한 서브 루틴은 shape 인수를 가질 수 없지만 가정 된 크기 배열 (또는 기타)을 가정 된 크기 인수 (a (*))가있는 상호 운용 가능한 서브 루틴에 전달할 수 있습니다. 배열이 연속적이지 않으면 임시 배열을 컴파일러에서 만들어야 할 수 있습니다.

+0

그렇다면 bind 인수를 ** assuming size **로 bind (c) 인터페이스에 선언하면, 모든 종류의 1D 배열을 전달할 수 있고 나머지는 컴파일러에서 처리 할 수 ​​있습니까? – Francium

+0

네, 그렇습니다. 그러나 때로는 일시적으로 만들어야합니다. –