我正在开发的软件同时使用C和Fortran77两种语言f子例程负责数学部分,而C例程负责管理软件的一般行为。
我的问题如下假设我有一个C例程.C,两个Fortran子程序sub1.f和sub2.f。
例程.c调用sub1.f而不是调用sub2.f:

 ... ->  routine.c  ->  sub1.f  ->  sub2.f

我的头文件(header.h)定义如下
void routine(ITG *int1, ITG *int2, char *char)
void FORTRAN(sub1(ITG *int1, ITG *int2, char *char))
void FORTRAN(sub2(ITG *int1, ITG *int2, char *char))

(所有的变量都是数组)
现在问题是:如果我用sub1.f写
write(*,*) 'int1(1) =', int1(1)

我实际上得到了数组的第一个值(对应于C中的int1(0)
但是sub2.f中的同一个命令行没有返回任何内容,我不明白为什么。

最佳答案

请张贴你的所有代码,以便它可以测试我不知道ITG是什么类型,也不知道您编译的是什么Fortran整数大小如果没有更多的代码,实际上不可能调试您的问题。
在C和Fortran 77之间传递字符类型是非常重要的由于Fortran不使用以空结尾的字符串,因此字符串长度有一个隐藏参数你的链接器没有注意到,这可能不是问题所在,但值得注意。
我强烈建议您使用Fortran 2003和isou C_绑定来实现C-Fortran互操作性它正是为这个目的而设计的,相对于其他需要的一堆不可携带的伏都教来说,它的效果非常好。

关于c - 在Fortran77子例程中传递C指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29649735/

10-10 20:44
查看更多