【问题标题】:Passing pointer from C to fortran Subroutine将指针从 C 传递到 fortran 子例程
【发布时间】:2013-07-06 12:16:27
【问题描述】:

我正在尝试从 C 调用 fortran 子例程,我可以在 C 中分配并将指针安全地传递给 Fortran 吗?子程序中的数组是一个自动数组(x(nmax))。

(我正在分配 x,然后将其传递给 fortran)

【问题讨论】:

    标签: c fortran fortran-iso-c-binding


    【解决方案1】:

    是的。现代 Fortran 保证可以从 C 调用 Fortran 例程,反之亦然。这是通过 Fortran ISO_C_BINDING 完成的。这是 Fortran 2003 的一部分,作为 Fortran 95 编译器的扩展被广泛使用。 gfortran 手册中有文档(章节“混合语言编程”和“内部模块”。)作为语言功能,此文档比 gfortran 编译器更有用。这里还有关于 stackover 的示例,可以通过 fortran-iso-c-binding 标签找到。

    简单代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    
    void F_sub ( float * array_ptr );
    
    int main ( void ) {
    
       float * array_ptr;
    
       array_ptr = malloc (8);
    
       F_sub (array_ptr);
    
       printf ( "Values are: %f %f\n", array_ptr [0], array_ptr [1] );
    
       return 0;
    }
    

    subroutine F_sub ( array ) bind (C, name="F_sub")
    
       use, intrinsic :: iso_c_binding
       implicit none
    
       real (c_float), dimension (2), intent (out) :: array
    
       array = [ 2.5_c_float, 4.4_c_float ]
    
    end subroutine F_sub
    

    【讨论】:

      【解决方案2】:

      一般来说,“是”:您可以将 C 数组传递给 FORTRAN,反之亦然。特别是如果两个编译器来自同一供应商(例如,从 g77 程序调用 gcc 函数)。

      这里有两个很好的链接:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多