2014-02-26 41 views
0

我工作的一些科学代码,主要是F77也有些F95。在某些地方,我需要在我的F95代码中包含F77代码。有没有办法让这个代码在我的代码中使用特定的编译器标志或其他东西很好地播放?我正在使用gfortran,偶尔也会使用。我可以修改遗留代码,但我需要以明智的方式来保持与其他F77代码的向后兼容性,同时还可以向前兼容F95代码。结合F77和F95 Fortran代码

我得到这样的错误:

cstruc:16.12: 
    Included at mod_op.f90:6: 

     REAL*8 
      1 
Error: Invalid character in name at (1) 
cstruc:17.6: 
    Included at mod_op.f90:6: 

    &  RH, RH1,  ! ln rho 
     1 
Error: Invalid character in name at (1) 
cstruc:18.6: 
    Included at mod_op.f90:6: 

    &  RHP, RHP1, ! d ln rho/d ln p 
     1 
Error: Invalid character in name at (1) 
cstruc:19.6: 
    Included at mod_op.f90:6: 

    &  RHT, RHT1, ! d ln rho/d ln T 
     1 
Error: Invalid character in name at (1) 

cstruc看起来是这样的:

REAL*8 
&  RH, RH1,  ! ln rho 
&  RHP, RHP1, ! d ln rho/d ln p 
&  RHT, RHT1, ! d ln rho/d ln T 
&  PSI,   ! ln Lambda (for degenerate gas) 
&  RHPSI,  ! d ln rho/d PSI 
&  RHPSIP,  ! d2 ln rho/d PSI d ln P 
&  RHPSIT,  ! d2 ln rho/d PSI d ln T 
&  PL,   ! P at J1 
&  TONI   ! T at J1 

任何帮助深表感谢。谢谢!

+2

的问题不应该是F77 VS F95,但自由格式与固定格式。 –

回答

3

也有一些例外,Fortran 77的代码是Fortran 95的代码。我猜你的错误来自于你试图将固定格式的源代码(你的F77代码在cstruc中)编码为一个自由格式的源代码文件mod_op.f90。这不太可能结束。

大多数编译器将承担” .F90" 结尾的文件是自由格式,所以如果你真的是利用固定形式,那么你将需要一个编译器标志覆盖的假设。

是可能的自由和固定格式的代码合并成一个最终目标(每个单独编译),但一个好的建议,就如何解决你所看到的问题可以用更详细只来了。

但是,如果您正在尝试使用include来创建替换通用块的模块,那么没有理由不能使用固定格式的F95功能。只要有选择地做。

+0

哦,有趣的..所以,如果我只是以固定的形式编写代码,但编译为Fortran 90/95,它应该没问题..我试图完全将我的代码转换为F77,但后来我意识到我需要现代功能。我明天会试一试:)谢谢! – Durand

+0

这工作完美,谢谢! – Durand

4

我建议尝试从http://fortranwiki.org/fortran/show/Continuation+lines

的“交集”的形式,它是合法的,免费和固定的源代码。

+0

这是一个很好的观点。加上将任何列-1“C”更改为“!”这应该涵盖大部分非疯狂的形式差异。 – francescalus

+0

我遇到过这个,但是由于某种原因,它并没有完全正常工作。但我会再试一次。谢谢! – Durand