【发布时间】:2014-12-20 17:43:09
【问题描述】:
我在将二维数组从 Fortran 传递到 C 时遇到问题。以下是我的 C 函数,它只在屏幕上显示数组元素。
#include <stdio.h>
void print2(double *arr , int *n)
{
int y = *n;
printf("\n y = %d", y);
for(int i =0; i<y; i++)
{
for (int j = 0; j < y; j++)
printf("%.6g", *((arr + i*y) + j));
printf("\n");
}
}
到目前为止,我的 Fortran 代码如下:
program linkFwithC
use, intrinsic :: iso_c_binding
implicit none
real, dimension(3,3)::a
a(1,1)=1
a(1,2)=2
a(1,3)=3
a(2,1)=4
a(2,2)=5
a(2,3)=6
a(3,1)=7
a(3,2)=8
a(3,3)=9
interface
subroutine print2(a,n) bind( c )
use, intrinsic :: iso_c_binding
type(c_ptr)::a
integer(C_INT)::n
end subroutine print2
end interface
call print2(c_loc(a),3)
end program linkFwithC
我链接这两个文件的方式是为 C 函数创建一个静态库并构建 .lib 文件。构建 .lib 文件后,我将其添加到 fortran 项目并运行 fortran 项目。代码运行无误,n值显示正确;但是,显示的数组值都是错误的。
请帮忙!
谢谢, 阿纳斯
【问题讨论】:
-
你在哪里调用 print2(不是 fortran 专家)。同样最好先在你的c函数中打印出n,如果它是0那么就没有输出
-
是真的,我刚加了调用就报了如下两个错误:
-
我没有看到任何调用 print2(a,3) ?
-
在 fortran 4 字节中不是“真实”,在 C 8 字节中不是“双”吗?
-
你需要在你的接口块中声明 print2 的参数。
标签: c arrays fortran fortran-iso-c-binding