在Fortran2003中,1D假设形状阵列可与C互操作吗?

时间:2016-07-13 10:44:25

标签: fortran dynamic-arrays fortran-iso-c-binding fortran2003

在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标准?

1 个答案:

答案 0 :(得分:2)

C可互操作的子例程不能具有假定的形状参数,但是您可以将假定的形状数组(或任何其他)传递给具有假定大小参数(a(*))的可互操作子例程。如果数组不连续,编译器可能必须创建临时数组才能执行此操作。