在Fortran 2003中,可分配数组不可与C互操作。我认为这与存储在内存中的其他数组信息有关,可能会干扰C解释。
但是如果我将伪参数声明为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
fortran中的界面可能喜欢
interface
function some_c_function(a)
integer(c_int) :: a(*)
end interface
在C中,原型可能是
int some_c_function(int *a)
这是否符合Fortran 2003标准?
答案 0 :(得分:2)
C可互操作的子例程不能具有假定的形状参数,但是您可以将假定的形状数组(或任何其他)传递给具有假定大小参数(a(*))的可互操作子例程。如果数组不连续,编译器可能必须创建临时数组才能执行此操作。