【问题标题】:In Fortran2003, is 1D Assumed shape array interoperable with C?在 Fortran2003 中,一维假设形状数组是否可与 C 互操作?
【发布时间】:2016-11-15 21:48:46
【问题描述】:

在 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 subroutine

fortran中的接口可能会喜欢

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

在 C 语言中,原型可能

int some_c_function(int *a)

这是否符合 Fortran 2003 标准?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 那么,这是否意味着如果我在 bind(c) 接口中使用 assumed size 声明虚拟参数,我可以将各种一维数组传递给它,并且编译器负责剩下的事情?
    • 是的,这是真的。但有时必须做一个临时的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多