第一个答案中的链接描述了过时的方法.通过添加ISO C绑定到Fortran,从C或Fortran中调用Fortran变得容易得多.使用此Fortran语言功能指示Fortran编译器发出与C二进制兼容的可执行代码.程序员不必"破解"连接,因为它是语言的一部分,它与编译器和平台无关.从技术上讲,ISO C绑定是Fortran 2003的一部分,但它已经在许多编译器中使用了好几年,例如,自4.3版本和英特尔ifort以来的gfortran.
要从C调用Fortran子例程或函数,可以使用绑定C选项声明Fortran子例程或函数,并使用绑定中提供的C兼容类型来声明参数.在"混合语言编程"下的gfortran手册中有一些例子.由于ISO C Binding是语言的一部分,因此本手册的这一部分主要与编译器无关.此处有关Stack Overflow和Web上其他地方的答案中还有其他示例.
这是一个从C调用的子程序的Fortran子程序声明的快速代码片段(未经测试):
subroutine test ( varint1, varflt2 ) bind ( C, name="MyTest" )
use iso_c_binding
integer (kind=c_int32_t), intent (in) :: varint1
real (kind=c_float), intent (out) :: varflt2
Run Code Online (Sandbox Code Playgroud)
绑定C名称"MyTest"会覆盖Fortran名称 - 与Fortran不同,它区分大小写.无需担心下划线!变量类型应该是显而易见的......有关可用的内容,请参阅gfortran手册或其他地方.