是否可以从C 调用FORTRAN接口
Is it possible to call a Fortran interface from C++
i具有以下代码未编译的代码。是否可以将Fortran接口称为C 中的重载函数,就像我在下面尝试的?
这是Fortran代码:
module functions
use, intrinsic :: iso_c_binding, only : c_double, c_int
implicit none
interface increment bind(c, name="increment")
module procedure increment_int, increment_double
end interface
contains
subroutine increment_int(a, b)
integer(c_int), intent(inout) :: a
integer(c_int), value :: b
a = a + b
end subroutine
subroutine increment_double(a, b)
real(c_double), intent(inout) :: a
real(c_double), value :: b
a = a + b
end subroutine
end module functions
这是C 代码:
#include <iostream>
namespace
{
extern "C" void increment(int&, int);
extern "C" void increment(double&, double);
}
int main()
{
int a = 6;
const int b = 2;
double c = 6.;
const int d = 2.;
increment(a, b);
increment(c, d);
std::cout << "a = " << a << std::endl;
std::cout << "c = " << c << std::endl;
return 0;
}
不,无法避免。但是您可以实例化模板调用两个。或者只是为这两个外部C函数制作C 通用包装器。您绝对不能使Fortran导出界面。接口只是一个描述,如何在Fortran中内部以某些名称调用两个子例程。
这个问题将接口模块过程从fortran导入到C中非常相似。我什至最初以重复的方式关闭了你的,但后来我改变了主意,因为尝试的解决方案略有不同。
但是原理是一样的。Fortran仿制药和C 仿制药不兼容。并且您之间的C没有类似类型的通用物。
注意:正如@RichardCritten的建议,您也不应在extern C
函数中通过参考。编译器可能对其进行编译,并以逐值传递指针,但不能保证它。只需通过指针即可。有关更多信息,请参见C 的参考参数和C链接。
相关文章:
- Fortran 和 C++ 的混合编程:Fortran 不能调用C++子程序
- 是否可以从C 调用FORTRAN接口
- 如何使用 std::vector 作为参数调用 Fortran 77 C++函数?
- 试图在C 中调用Fortran子例程
- 如何在 C++14 中编写用于调用 Fortran 函数的通用包装器(按引用调用 --按值调用>)
- 从C 调用Fortran子例程会产生非法参数值
- MATLAB由于调用库(C++.h文件和FORTRAN.dll)而崩溃
- 从C++调用的Fortran子程序的值错误
- 为什么值放置在 fortran 函数的数组中,而在调用 c++ 函数中不存在
- 当C代码调用Fortran子程序时,子程序顶部会出现分段错误
- 从 C++ 调用 Fortran 子例程
- C++从dll调用FORTRAN子程序
- 调用 Fortran 函数会使程序挂起
- 从Qt C++调用Fortran函数
- 如何从C++中调用fortran例程
- 如何在C语言中以函数作为参数调用Fortran dll
- 从c++调用Fortran子程序,链接时引用未定义
- 从c++调用Fortran;返回的字符串已损坏
- 从c++调用FORTRAN库的问题
- 使用c++ /intel c++编译器调用fortran函数