将FORTRAN转换为C/C++; 作为我的最后一年项目的一部分,我需要把一些FORTRAN代码转换成C或C++(只要我能理解哪种语言就没有关系,我能理解C风格的语言)。

将FORTRAN转换为C/C++; 作为我的最后一年项目的一部分,我需要把一些FORTRAN代码转换成C或C++(只要我能理解哪种语言就没有关系,我能理解C风格的语言)。,c++,c,windows,fortran,nmake,C++,C,Windows,Fortran,Nmake,我发现了f2c,一个据称可以将FORTRAN转换为C的程序,并试图按照说明安装它,方法是在我的驱动器上保存一个makefile.vc文件,然后执行以下操作 copy makefile.vc makefile nmake (这是自述文件中关于安装f2c的部分,包含在f2c中) 在Linux或Unix上编译f2c 系统,将makefile.u复制到makefile, 如有必要,编辑makefile(请参见 注释(包括下面的注释)和类型 “make”(或者可能是“nmake”,取决于 您的系统) 在

我发现了f2c,一个据称可以将FORTRAN转换为C的程序,并试图按照说明安装它,方法是在我的驱动器上保存一个makefile.vc文件,然后执行以下操作

copy makefile.vc makefile
nmake
(这是自述文件中关于安装f2c的部分,包含在f2c中)

在Linux或Unix上编译f2c 系统,将makefile.u复制到makefile, 如有必要,编辑makefile(请参见 注释(包括下面的注释)和类型 “make”(或者可能是“nmake”,取决于 您的系统)

在MS Windows上编译f2c.exe的步骤 微软Visual C++,< /P>系统 复制makefile.vc makefile nmake

对于其他PC编译器,您可能需要 要使用-DMSDOS编译xsum.c(即。, 已定义MSDO)

如果编译器不理解 ANSI/ISO C语法(即,如果您有 K&R C编译器),使用 -DKR_头

在文件不可用的非Unix系统上 单独的二进制和文本模式,您可以 可能需要“make xsumr.out”而不是 而不是“make xsum.out”

我正在运行64位版本的Windows Vista,并尝试了“nmake”,但我得到了

“nmake”不能识别为内部或外部命令、可操作程序或批处理文件

经过一些搜索后,我下载了Nmake15.exe,但它在x64位机器上不起作用,而且显然没有一个版本能起作用。所以我下载了Windows SDK,在被告知它可以工作后,但它没有改变任何事情


我在哪里出错了,如果我有,有没有办法把FORTRAN代码转换成C或C++?< /P> < P>你试过了

< P>如果我必须在Windows上安装F2C,我会使用CygWin。现在有了77国集团,我希望不再有多少人使用f2c了。

你安装了微软的Visual Studio吗?如果是,则可以在VisualStudio命令行(而不是普通命令行)上使用nmake。如果没有,也许可以试着下载并安装它?

f2c确实是一种方法,只要你有F77代码。如果您有F90或更高版本,那么f2c将没有帮助。只要你还记得-a开关,我已经多次成功地使用了f2c


顺便说一句,我认为f2c是有史以来最伟大的代码之一

我只回答你问题的最后一部分:

有没有办法把它转换成 FORTRAN代码转换成C或C++?< /P> 是的,有:读取fortran代码,并在C文件中编写等效的C语句。
它们都是命令式语言。语法不同,但并非无法解码。这可能会给你比自动转换器更好的结果,也会让你对原程序的工作有更深的理解。

你对此并不十分清楚,但是听起来你想学习代码,为了做到这一点,你想把它转换成C或C++。如果你想使用代码而不是研究它,那么我就不在这里,你应该寻找Fortran编译器

放弃。你找不到任何方法来将惯用的FORTRAN译成惯用的C或C++。这两种语言之间存在着微妙的语义差异,为了使之正确,翻译程序需要非常精确,需要考虑很多事情,并进行模糊的函数调用,这可能会非常混乱。您将无法获得C或C++的.< /P>
相反,您应该学习适当版本的Fortran。如果你理解C和C++,就不难学了。它只是另一种语言,不会有太多新概念

你需要弄清楚你为什么要这样做。是因为您需要的功能仅在某些旧版FORTRAN中可用吗?很多年前,当我需要一个通用的矩阵求逆算法时,我就遇到了这个问题,这个算法只在FORTRAN中可用。这不容易理解——没有像G(J)这样命名的注释和变量。我用f2c把它转换成C,它运行得很好。但这更难理解。有两点是FORTRAN从1开始计数,C从0开始计数,所以有很多i+1和j-1。此外,参数必须通过引用实现

后来我不得不用Java运行这个。仍然没有其他算法,所以我将C转换为Java。这真的很痛苦。我仍然不明白发生了什么

一两年后它就停止工作了

但是,幸运的是,现在有几个Java实现


如果你能解释一下你的真实需求,也许我们能帮上忙。我希望这不是一个任务,因为如果是这样的话,我认为这是一个糟糕的任务。如果有一些神奇的遗留代码,建议您尽可能努力找到一个现代的等价物

到目前为止,我一直在使用的转换方法是半自动的:大量的编辑器和文本脚本

首先,将所有Fortran源代码准直到一个文件中(适当放置标记以允许重新分离文件)

接下来,将数字标签转换为命名标签(例如,对于gotos,在数字标签前面添加L,对于格式,在数字标签前面添加F)。在参考标签的位置进行适当的更改

接下来,标记label-continue组合和语句continuations(例如,在它们出现的每一行的开头都有一个标记)。然后重新连接标签continue和语句continue行。在像vi这样的编辑器中,这意味着要做一系列(比如)1000J,然后如果行号的开始是一个#,则需要大量替换:%s/#/^V^M/g。由于延续行被特别标记为do continue组合,因此它们被重新加入

确保if标签和do标签分开(例如,编写grep模式提取相关行,然后编写简单的括号匹配程序检查它们)。分离后,您可以将do continues转换为br