在Fortran 2003中,可分配数组是,而不是C可互操作的,我认为这与存储在内存中的额外数组信息有关,这可能会干扰C解释。
但是,如果我将一个虚拟参数声明为一维假设的形状数组呢?例如
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 subroutinefortran中的接口可能类似于
interface
function some_c_function(a)
integer(c_int) :: a(*)
end interface在C语言中,原型可能
int some_c_function(int *a)这是否符合Fortran 2003标准?
发布于 2016-07-13 12:59:06
C可互操作子程序不能假定形状参数,但可以将假定的形状数组(或任何其他)传递给具有假定大小参数(a(*))的可互操作子程序。如果数组不是连续的,则编译器可能必须创建临时数组才能这样做。
https://stackoverflow.com/questions/38349435
复制相似问题