我目前正在开发的软件使用C和Fortran77两种语言。.f子例程负责数学部分,而C例程负责管理软件的一般行为。
我的问题如下。假设我有一个C例程.c,以及两个Fortran子例程sub1.f和sub2.f。
routine.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中的相同命令行没有返回任何东西,我不明白为什么。
发布于 2015-04-17 13:21:23
请发布您的所有代码,以便它可以进行测试。我不知道ITG是什么类型,也不知道你编译的Fortran整数的大小是多少。如果没有更多的代码来调试你的问题实际上是不可能的。
在C和Fortran 77之间传递字符类型是非常重要的。因为Fortran不使用以null结尾的字符串,所以字符串长度有一个隐藏参数。您的链接器没有注意到,这可能不是这里的问题,但它值得注意。
我强烈建议您使用Fortran2003和ISO_C_BINDING来实现C-Fortran的互操作性。它就是为这个目的而设计的,相对于其他方式所需的一堆不可移植的伏都教来说,它工作得非常好。
https://stackoverflow.com/questions/29649735
复制相似问题