我正在从可可应用程序中调用 fortran 子例程。该应用程序正在成功构建并按预期工作,但我有这个语义问题:*
函数“_increment”的隐式声明在 C99 中无效
increment.o 是编译后的 fortran 子例程(gfortran 编译器)
subroutine increment(n)
integer :: n
n=n+1
end subroutine increment
我究竟做错了什么 ?谢谢您的帮助。
我正在从可可应用程序中调用 fortran 子例程。该应用程序正在成功构建并按预期工作,但我有这个语义问题:*
函数“_increment”的隐式声明在 C99 中无效
increment.o 是编译后的 fortran 子例程(gfortran 编译器)
subroutine increment(n)
integer :: n
n=n+1
end subroutine increment
我究竟做错了什么 ?谢谢您的帮助。
您必须声明函数的类型。就像是:
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
或其他。