3

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

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

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

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

4

4 回答 4

9

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

于 2008-11-27T03:29:30.347 回答
8

这个可能有点走投无路,但是您是否考虑过,由于您可能正在使用 C 风格的包含,您实际上可以在文件上运行 C 预处理器以包含这些文件?然后,您可以获取输出并通过 f2c 运行它。

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

于 2008-11-27T03:22:19.847 回答
7

您可能会摆脱手动转换

#include “whatsit.f90”

包括“whatsit.f90”

然后再次尝试 f2c 转换。

于 2008-11-27T03:24:45.753 回答
4

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

于 2008-11-27T03:23:29.237 回答