1

我正在从可可应用程序中调用 fortran 子例程。该应用程序正在成功构建并按预期工作,但我有这个语义问题:*

函数“_increment”的隐式声明在 C99 中无效


截屏

increment.o 是编译后的 fortran 子例程(gfortran 编译器)

subroutine increment(n)
     integer :: n
     n=n+1
end subroutine increment

我究竟做错了什么 ?谢谢您的帮助。

4

1 回答 1

2

您必须声明函数的类型。就像是:

void increment_(int * i);

(在 C 中,但我认为它是相同的,我猜是正确的签名,你没有显示它的代码)。

顺便说一句,我推荐 Fortran 子例程,bind(C)甚至bind(C,name="increment")你不必使用尾随 _。

编辑:试试这个

在 .m 文件中:

void increment(int * i);

int .f90 文件:

subroutine increment(n) bind(C,name="increment")
 use iso_c_binding
 integer(c_int),intent(inout) :: n
 n = n+1
end subroutine

如果没有帮助,请尝试使用调试器,或者尝试在子例程中调试打印语句 if loc(n)is equal to&i或其他。

于 2013-09-03T13:31:53.783 回答