编译FORTRAN程序的困难
我想使用一些用Fortran编写的光散射代码。我对Matlab非常熟悉,并且自己教C++,但现在FORTRAN给我带来了很多的悲伤。 我刚刚让Photran与Eclipse一起工作,它可以编译(根据Photrans指令使用Cygwin中的Gfortran)我在网上找到的Fortran示例程序 我想在这里开始工作的主要部分是:(注意,它的一半以上似乎只是控制台输出和注释,实际代码非常小) 事实上,我已经用Mathematica编写了一个程序,它已经完成了这些计算,但我觉得这将是一个很好的测试用例,可以让我的双手在Fortran中变脏,转而使用其他代码。如果有人能给我指出正确的方向来完成这个编译,那就太好了。谢谢 编辑:所以我得到的结果是编译它时只使用了最多(只使用了警告) 第二,我补充说编译FORTRAN程序的困难,fortran,gfortran,Fortran,Gfortran,我想使用一些用Fortran编写的光散射代码。我对Matlab非常熟悉,并且自己教C++,但现在FORTRAN给我带来了很多的悲伤。 我刚刚让Photran与Eclipse一起工作,它可以编译(根据Photrans指令使用Cygwin中的Gfortran)我在网上找到的Fortran示例程序 我想在这里开始工作的主要部分是:(注意,它的一半以上似乎只是控制台输出和注释,实际代码非常小) 事实上,我已经用Mathematica编写了一个程序,它已经完成了这些计算,但我觉得这将是一个很好的测试用例,
DO I=1,5
WRITE (*,*)
END DO
我有3个错误:
一旦我删除了DO,我就可以添加文字和eg
WRITE (*,*) 'This code calculates cross-efficiencies for'
它将编译并生成.exe。我猜DO给我带来了麻烦 结果是我需要
gfortran -ffixed-line-length-n
标志,其中n为132,表示我链接的源代码。我有一些其他代码可以进行类似的计算,它在Eclipse的指南中完美地排列,但这一个是解决问题的方法。
谢谢你们让我走上正轨。这是一个更简单的解决方案。您的代码是固定格式的,即 源代码中的代码行是72。您只需要在新行中添加“额外”代码。 如下图所示(第6列中带
的行续)
如果您在这里发布一些代码,以及在尝试编译时遇到的错误,您可能会更幸运。如果您已经有示例Fortran程序正在编译,并且我猜想正在执行,那么是什么阻止了您编译和执行自己的程序?我真的看不出你的问题,你的问题很模糊,不知道你想告诉什么。哦,我当然不会读你指给我们看的代码,我可能会在你的问题中读到相当多的代码。请仔细阅读错误消息。您的编译器实际上只在代码中发现了一个错误(
Symbol'i'at(1)没有隐式类型
),其他两个错误是由此产生的直接后果。@SteveHatcher不删除隐式无
。相反,在程序/过程/子例程的顶部(具有DO I=1,5
的顶级程序部分)写入整数I
声明。如果您使用隐式声明,您将面临各种类型的错误,这些错误类型由于某种原因无法被编译器捕获。是否确实要记住,默认情况下,名称以A
开头的变量/函数是否具有REAL
、INTEGER
或英文字母表中每个字母的任何类型?删除隐式无
不会解决任何问题,它允许编译器不向您报告潜在的严重问题。删除隐式无
只会让事情变得更糟而不是更好。如果您不明白为什么会这样,请转到您的基本Fortran教程,并再次阅读该章。如果您的代码片段应该是您声称的固定形式,为什么在第7列的左侧有部分语句?实际上我没有,当我在web上发布时,它出现了错误。圆点。应该出现在字母R的下面,应该出现在字母W之前的一个空格下面。对不起,不应该出现在字母RI的下面。谢谢。不管怎样,我很高兴我最终成功了。
gfortran -ffixed-line-length-n
C 1 2 3 4 5 6 7
C23456789012345678901234567890123456789012345678901234567890123456789012
WRITE (*,*) '(For a single particle size, make it equal to the min
.imum value)'
READ (*,*) kr2
C Just in case Homer cannot handle it...
IF((KR+4.0D0*KR**0.33333+2).gt.MSIZE) THEN
WRITE (*,*) 'Sorry, this value is too high'
WRITE (*,*) 'Please enter a value smaller than', int(msize-4.0D0*m
.size**0.33333+2)