7
如何在使用可选参数的C++头文件中引用Fortran函数?我会在头文件中为每个可能的呼叫组合添加一个原型吗?或者这甚至有可能?使用C++的可选参数调用Fortran子例程
例如,Fortran语言:
subroutine foo(a, b, c) bind(c)
real, intent(in), optional :: a, b, c
...
end subroutine foo
如何在使用可选参数的C++头文件中引用Fortran函数?我会在头文件中为每个可能的呼叫组合添加一个原型吗?或者这甚至有可能?使用C++的可选参数调用Fortran子例程
例如,Fortran语言:
subroutine foo(a, b, c) bind(c)
real, intent(in), optional :: a, b, c
...
end subroutine foo
这是不可能的,至少可移植的,除非你的子程序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
事实上,它并非没有BIND(C)去任何地方。谢谢! – DavidH