将Fortran转换为C或C ++

我有一些我需要转换为C或C ++的数字代码。 我尝试使用f2c,但它不适用于Fortran代码。 f2c抱怨,因为代码使用C样式预处理器指令(#include)。 该代码的自述文件声明它是Fortran77,与fort77链接器一起使用,可以扩展这些包含。

有谁知道如何成功转换此代码?

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

注意:我在这里的Windows / Visual C ++环境中工作,所以任何gcc恶作剧都可能比它们的价值更麻烦……

这个 可能 虽然你可能正在使用C风格的包含,但是你可以在文件上运行C预处理器以包含这些文件吗? 然后,您可以获取输出并通过f2c运行它。

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

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

你可能会手动转换

#include“whatsit.f90”

包括’whatsit.f90′

然后再次尝试f2c转换。

你没有C预处理器吗? 在Unix上,可能有一个单独的程序cpp,它将带有#include指令的Fortran,并在没有#include指令的情况下将其转换为Fortran。 或者,您可以将源从xyz.f77xyz.f )重命名为xyz.c ,然后在“仅预处理器”模式下运行C编译器并将输出捕获为f2c程序的新输入。 您可能不得不担心消除输出中的#line指令等的选项,或者您可能最好通过一个简单的filter( sedperl spring)来运行输出。