阅读Fortran的C ++“Hello World”

时间:2016-04-06 22:09:25

标签: c++ fortran gfortran

我正在尝试验证一个用c ++编写的简单hello world函数可以从FORTRAN脚本调用(gfortran 4.9.20。我对c ++和FORTRAN都没什么经验所以我认为这是我应该开始的。< / p>

//code.cpp
#include <iostream>

extern "C"
{
  void worker();
  int main()
    {
      worker();
    }
  void worker()
    {
      std::cout << "Hello, World!\n";
    }
}

和标题如下

//code.h
#include "code.cpp"

extern "C"
  {
    void worker();
  }

我可以使用下面的简单代码在c ++中调用我的hello函数

//readheader.cpp
#include "code.h"

extern "C"
  {
    void worker();
  }

我认为一切顺利,直到我尝试使用FORTRAN读取相同的代码。它可能是我的编译行,此时我不确定我的代码的哪一部分被破坏了。以下是我的FORTRAN代码

c codeF.f

      program main
      include 'code.h'
      print *, 'Calling C'
      call worker()
      print *, 'Back to F77'

      end program main

我的编译脚本

gfortran -I/Path/to/file -c codeF.f

我在'code.h'标题中得到8个错误。虽然我的c ++代码可以读取标题FORTRAN不能。到目前为止,我所有的互联网研究都引导我到这里,希望有经验的人可以帮助我。

由于

1 个答案:

答案 0 :(得分:1)

您不能在Fortran中包含C ++标头。您必须创建一个接口块,它描述了Fortran可以调用它的过程:

  program main

    interface
      subroutine worker() bind(C,name="worker")
      end subroutine
    end interface

    print *, 'Calling C'
    call worker()
    print *, 'Back to F2003'

  end program main

您可能仍然遇到问题,建议将Fortran和C ++ I / O(std:cout流和print语句)合并到一个可执行文件中。它们不能保证兼容,并且可能发生奇怪的事情。

忘了FORTRAN 77,它已经40岁了,这比这里的很多人(包括我)都要多。考虑到计算机和程序的发展速度,即使Fortran 90也太老了。最新标准是Fortran 2008,Fortran 2015作为草案存在。

请参阅中的问题和答案,了解有关将C和C ++与Fortran连接的更多信息。