混合编程Fortran和C.

Sha*_*haz 1 c mixed fortran fortran-iso-c-binding

我是理论物理研究专业的学生,​​在宇宙学领域工作.在我的研究过程中,我使用了相当庞大的Fortran代码库,我使用C来满足编程需求.

我已经能够在众多测试文件中链接这两个程序,并且它们的工作非常出色.但对于他们来说,我一直在使用目标文件将它们全部链接起来.但是当我尝试通过C运行真实交易时,请包含对Fortran头文件的引用.它们似乎集成并相互调用,但Fortran头文件的格式与C编译器不兼容,因此当它跳转到头文件时,它会开始抛出无法理解语法的错误.

例如,Fortran头文件使用real*8定义双变量,因此当C读取它们时会抛出错误.文件中的注释也会发生同样的情况.

那么,我想问一下,有什么方法可以解决这个问题吗?即通过C使fortran格式头文件可读.

我查看了互联网,发现了令人困惑的答案,我不知道应该遵循哪一个.任何有关此事的帮助将不胜感激:)

Fra*_*acq 7

对不起,你很困惑.什么是Fortran头文件?例如,您无法使用C编译器读取Fortran包含文件!这两种语言太不同了.另外,Fortran包含文件几乎从不是与C的文件相当的头文件.

我不知道你使用的编译器类型.但是如果您选择了最近的GCC版本(Gnu编译器集合),那么内部包含的Fortran编译器就能够考虑ISO_C_BINDING功能,这样可以更容易地耦合Fortran-C.

示例:

MODULE my_fortran
  USE iso_c_binding
  IMPLICIT NONE
  CONTAINS
  SUBROUTINE my_subroutine(a,b) BIND(C,name="my_sub")
    INTEGER(c_int),INTENT(in),VALUE :: a
    REAL(C_DOUBLE),INTENT(out) :: b
    ...
  END SUBROUTINE
END MODULE
Run Code Online (Sandbox Code Playgroud)

例如,名为"my_sub.h"的C头文件:

void my_sub(int, double *);
Run Code Online (Sandbox Code Playgroud)

C档

#include "my_sub.h"

int main(){
  double b;
  int a=3;
  my_sub(a,&b);
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 再次请,不要将Fortran包含文件包含在C文件中!永远不会!这不行.Fortran包含文件只能包含在Fortran源文件中. (3认同)