【发布时间】:2015-05-24 03:10:09
【问题描述】:
我是编程新手,我想在我的 c++ 代码中调用一个 fortran 函数。问题是我不知道如何将 fortran character*81 数组传递给我的 c++。
fortran 代码如下:
subroutine func01(a)
implicit none
character*81 a(2)
write(*,*) a(1)
write(*,*) a(2)
end
c++代码是这样的:
#include <iostream>
extern "C"{
void func01_( const char **a );
}
int main()
{
const char *a[2];
a[0]="Hello world!";
a[1]="This is a test!";
func01_(a);
return 0;
}
我用这个基本测试了我的fortran代码
program pro01
character*81 a(2)
a(1)='Hello world!'
a(2)='This is a test!'
call func01(a)
end program pro01
'func01(a)' 效果很好。
感谢@PaulMcKenzie,我纠正了一些愚蠢的问题.....
但是,当我编译 cpp 代码时,结果就像乱七八糟的代码:
7
@L
@��n��@�UH�j��FP
@��n���U�շ�=��U�ྼ��� @��
我该怎么办?
【问题讨论】:
-
我认为你需要复习基本的 C++:
char a[2][81]; a[0][81]="Hello world!";这不是用字符串初始化 char 数组的方法。 C++ 不是 Fortran。 -
您使用的是哪个工具链?从布局上看,显然不是F77。直到 Fortran 95,没有内置的 C 互操作性,任何接口都是特定于供应商的。从 Fortran 2003 开始,C(不是 C++)互操作性。
-
谢谢@cup ...但是,我没有抓住你.....我所做的是:第1步。 gfortran -ffree-form -c func01.f ;第2步。 g++ -std=c++0x -c tstcpp.cpp ;第三步。 g++ -o tst01 func01.o tstcpp.o;就是这样......
-
在 Internet 上搜索 ISO_C_BINDING。您将获得很多成功,并且可能会解决您的问题。
标签: c++ fortran fortran77 mixing