2016-10-17 23 views
7

如何在使用可选参数的C++头文件中引用Fortran函数?我会在头文件中为每个可能的呼叫组合添加一个原型吗?或者这甚至有可能?使用C++的可选参数调用Fortran子例程

例如,Fortran语言:

subroutine foo(a, b, c) bind(c) 
    real, intent(in), optional :: a, b, c 
    ... 
end subroutine foo 

回答

10

这是不可能的,至少可移植的,除非你的子程序bind(C)

一旦你使它成为bind(C),它只是传递一个指针,它可以在C端为NULL。

subroutine foo(a, b, c) bind(C, name="foo") 
    real, intent(in), optional :: a, b, c 
    ... 
end subroutine foo 

(用于从iso_c_binding模块更大的便携real(c_float)应该使用,但是这是有点切向这个问题)

在C(++)

extern "C"{ 
    void foo(float *a, float *b, float *c); 
} 

foo(&local_a, NULL, NULL); 

,然后就可以创建一个C++函数,调用foo并使用C++风格的可选参数。

此功能是29113允许使用Fortran的技术规范ISO/IEC TS:2012 Fortran语言的进一步的互操作性与C

+0

事实上,它并非没有BIND(C)去任何地方。谢谢! – DavidH

相关问题