gpt4 book ai didi

c++ - 将数组从 fortran 传递给 C++ 函数

转载 作者:行者123 更新时间:2023-11-30 04:18:37 24 4
gpt4 key购买 nike

我有一个用 Fortran 编写的主程序。我在 Visual Studio 2010 上使用 Intel Visual Fortran XE 2011。我想使用一个用 C++ 编码的函数。我正在使用的函数是获取多个数组(输入 - 从主 fortran 程序设置)并使用它们形成一个输出数组(返回到主 fortran 程序)。我采取了以下步骤:

1)我用 Fortran 主程序和模块创建了一个 Fortran 项目,并将其设置为“启动项目”。

2)我创建了一个“静态库”类型的 C++ 项目。

3) 我添加了 $(IFORT_COMPILERvv)\compiler\lib\ia32 如此处解释 http://software.intel.com/en-us/articles/configuring-visual-studio-for-mixed-language-applications

C++ 静态库构建没有问题。我得到的错误是关于在 fortran 程序中声明 real(8) 变量。

对于所有 real(8) 声明,我得到以下两个错误,即总共有 6 个错误:

error #5082: Syntax error, found '(' when expecting one of: :: %FILL , TYPE BYTE CHARACTER CLASS DOUBLE DOUBLECOMPLEX DOUBLEPRECISION ...

error #5082: Syntax error, found '::' when expecting one of: ( * , ; [ / = =>

这是我使用的代码:

主要 Fortran 程序:

Program Fort_call_C

use iso_c_binding

implicit none

interface

subroutine vec_sum_c(a,b,c) bind (C, name = "vec_sum_c")

use iso_c_binding

implicit none

real(8) (c_double), intent (in), dimension (*) :: a,b
real(8) (c_double), intent (out), dimension (*) :: c

end subroutine get_filled_ar

end interface

integer:: i
integer (c_int)::m
real(8)(c_double),dimension(:):: a, b, c

open(unit=10, file="input_arrays.txt",status="unknown")
read(10,*) m
allocate(a(m),b(m),c(m))

do i=1,m
read(10,*)a(i),b(i)
end do
close(10)

call vec_sum_c(m,a,b,c)

do i=1,m
print*, c(i)
end do

pause

end program

C++函数是:

extern"C" void vec_sum_c(int *m, double *a, double *b, double *c){
int mm = *m;
for(int i=0;i<=m-1;i++){
c[i]=a[i]+b[i];
}
}

有人可以帮我解决这个问题吗?如果将整个数组从 Fortran 程序发送到 C++ 例程的想法是安全的还是有问题的(最好避免),请告诉我?

最佳答案

您的 Fortran 语法已过时。你有两次真正的那种。尝试

REAL(C_DOUBLE), INTENT(IN), DIMENSION(*) :: a, b

等等

C_DOUBLE 是一个命名常量。该处理器的值恰好为 8。

还有:

  • 您在 C 函数的 Fortran 接口(interface)主体中缺少参数 m
  • 您在开始和结束语句之间改变了对 Fortran 接口(interface)体中子例程名称的想法!
  • 你的 C++ for 循环小于等于 m,它可能应该是 mm

以这种方式发送整个数组没有固有问题。

关于c++ - 将数组从 fortran 传递给 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16330892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com