将Fortran转换为C或C++; 我有一些数字代码,我需要转换成C或C++。我尝试过使用f2c,但在Fortran代码中它不起作用。f2c抱怨,因为代码使用C风格的预处理器指令(#include)。 代码的自述说明是Fortran77与fort77链接器一起工作,它将扩展这些包含

将Fortran转换为C或C++; 我有一些数字代码,我需要转换成C或C++。我尝试过使用f2c,但在Fortran代码中它不起作用。f2c抱怨,因为代码使用C风格的预处理器指令(#include)。 代码的自述说明是Fortran77与fort77链接器一起工作,它将扩展这些包含,c++,c,fortran,C++,C,Fortran,有人知道如何成功转换此代码吗 我最后的办法是编写一个简单的预处理器来扩展这些包含,然后将代码提供给f2c 注:我在Windows /Visual C++环境下工作,所以任何GCC ShanaGIANS可能会比它们值钱的麻烦多……/P> < P>这可能是有点麻烦,但你是否考虑过,因为也许你使用的是C样式,你可以在文件上运行C预处理器来包含这些文件吗?然后,您可以获取该输出并通过f2c运行它 (我不是这方面的专家。如果合适的话,请投反对票。)您没有C预处理器吗?在Unix上,可能会有一个单独的程序c

有人知道如何成功转换此代码吗

我最后的办法是编写一个简单的预处理器来扩展这些包含,然后将代码提供给f2c

注:我在Windows /Visual C++环境下工作,所以任何GCC ShanaGIANS可能会比它们值钱的麻烦多……/P> < P>这可能是有点麻烦,但你是否考虑过,因为也许你使用的是C样式,你可以在文件上运行C预处理器来包含这些文件吗?然后,您可以获取该输出并通过f2c运行它


(我不是这方面的专家。如果合适的话,请投反对票。)

您没有C预处理器吗?在Unix上,可能会有一个单独的程序cpp,它将使用带有
\include
指令的Fortran,并将其转换为不带
\include
指令的Fortran。或者,您可以将源代码从
xyz.f77
xyz.f
)重命名为
xyz.c
,然后在“仅预处理器”模式下运行c编译器,并将输出捕获为
f2c
程序的新输入。您可能需要担心在输出中删除
#line
指令等选项,或者您最好通过一个简单的过滤器(
sed
perl
来运行输出。

您可能不需要手动转换

#包括“whatsit.f90”

包括“whatsit.f90”


然后再次尝试f2c转换。

我在一个工程研究小组工作了很多年。我们从未幸运地完成从Fortran到C的自动转换。代码不是特别容易理解,而且很难维护。我们最幸运的是使用Fortran代码作为算法的模板,并对我们希望继续使用的任何东西进行重新实现。或者,您可以更新Fortran以使用更现代的Fortran结构,并获得与迁移到C/C++时相同的值。我们还成功地从C中调用Fortran例程,尽管调用约定的差异有时会使事情变得困难。

老笑话是unix工具“rm”会将过时的Fortran程序转换为可用磁盘块,您可以使用它来正确编写。这实际上是一个很好的笑话:-)请参阅此讨论:Hun。。。我对此感到很难过。但是我的编译器(Visual C++ 9)与预处理器不分离…或者有一个命令行来指定它吗?您可能想要使用/////p选项的组合,详见Agin,如何在Visual C++ 9中使用这个预处理器仅模式(即使它是FORTRAN 77代码)(所以扩展可能是F77而不是F90)。当然值得一试。当然,最好是自动进行转换。这不是一个很难编写的脚本——可能是Perl的一行程序。我还发现,f2c作为构建过程的一部分,比将源代码转换为随后由人类编辑更有意义。