相关疑难解决方法(0)

从C调用FORTRAN子例程

我试图从C调用FORTRAN函数

我的问题是:

  1. 如果fortRoutine是我的fortran子程序的名称,那么我从C中调用它fortRoutine_.如果fortRoutine只包含一个字符数组参数,那么我可以像这样传递:

    fortRoutine_("I am in fortran");
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在调用FORTRAN子例程时,何时应该使用pass by值和何时通过引用传递?

由于我是C的新手,我对此并不了解.如果可能的话,请提供一些很好的教程链接.

c fortran fortran-iso-c-binding

13
推荐指数
2
解决办法
9453
查看次数

将char数组从c ++传递给fortran

我无法将char数组从c ++传递给fortran(f90).

这是我的c ++文件'cmain.cxx':

#include <iostream>

using namespace std;

extern "C" int ftest_( char (*string)[4] );

int main() {
    char string[2][4];

    strcpy(string[0],"abc");
    strcpy(string[1],"xyz");

    cout << "c++: string[0] = '" << string[0] << "'" << endl;
    cout << "c++: string[1] = '" << string[1] << "'" << endl;

    ftest_(string);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我的fortran文件'ftest.f90':

SUBROUTINE FTEST(string)

CHARACTER*3 string(2)
CHARACTER*3 expected(2)
data expected(1)/'abc'/
data expected(2)/'xyz'/

DO i=1,2
    WRITE(6,10) i,string(i)
10  FORMAT("fortran: string(",i1,") = '", a, "'" )

    IF(string(i).eq.expected(i)) THEN
        WRITE(6,20) string(i),expected(i)
20      FORMAT("'",a,"' …
Run Code Online (Sandbox Code Playgroud)

c++ arrays fortran

6
推荐指数
2
解决办法
6495
查看次数

在默认类型和 C 互操作类型之间转换 Fortran 字符和逻辑数组

我将一些遗留的 F77 代码(我无法更改)包装在 C 接口中。假设遗留代码有

subroutine foo(s, l)
  character*10  s
  logical       l(10)
  …
Run Code Online (Sandbox Code Playgroud)

我正在编写一个小的 F2008 包装器foo_wrapper,它打算通过 公开与 C 兼容的接口ISO_C_BINDING,进行任何必要的类型转换,调用foo,最后再次进行类型转换。我的理解是我应该从

subroutine foo_wrapper(c_s, c_l) bind(C, name="foo_wrapper")
  use ISO_C_BINDING, only: C_CHAR, C_BOOL
  character(kind=C_CHAR, len=1), dimension(10) :: c_s
  logical(kind=C_BOOL)                            c_l(10)
  …
Run Code Online (Sandbox Code Playgroud)

但是我实际上如何进行从c_s到 a的转换character*10,同样为c_l到 a logical(并在调用后返回)?

arrays fortran ffi fortran-iso-c-binding

3
推荐指数
1
解决办法
55
查看次数

标签 统计

fortran ×3

arrays ×2

fortran-iso-c-binding ×2

c ×1

c++ ×1

ffi ×1