将一个C指针传递到Fortran77子例程中

时间:2015-04-15 12:04:43

标签: c pointers fortran fortran77

我目前正在使用的软件使用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中的命令行没有给我任何回复,我也不明白为什么。

1 个答案:

答案 0 :(得分:1)

请发布您的所有代码,以便进行测试。我不知道ITG是什么类型或者你正在编译的Fortran整数大小。如果没有更多的代码代码,实际上无法调试您的问题。

在C和Fortran 77之间传递字符类型是非常重要的。因为Fortran不使用以null结尾的字符串,所以字符串长度有一个隐藏参数。您的链接器没有注意到,这可能不是问题所在,但值得注意。

我强烈建议您使用Fortran 2003和ISO_C_BINDING进行C-Fortran互操作性。它的设计正是为了这个目的而且相对于一堆非便携式伏都教而言非常好。