我试图编译FORTRAN 77代码,我也遇到了类似的问题。
integer row(nnzmax+nszero),column(nnzmax+nszero),
+ ireg(nximax),florsm(nzimax)/nzimax*2/
real lambda,imodel(nximax,nzimax),dm(nmmax),
+ dum1(nmmax),dum2(nmmax),data(ndmax+nsconst),
+ anz(nnzmax+nszero),ibmodel(nximax,nzimax),
+ smwz(nzimax)/nzimax*-1./,spwz(nzimax)/nzimax*-1./
Error on line 50: attempt to give DATA in type-declaration
Error on line 52: attempt to give DATA in type-declaration我以前使用过这段代码,但它是用Intel Fotran编译器编译的。我已经搬到了其他国家,所以我没有在这里安装ifort。我现在正在使用fort77。我应该尝试使用一些编译选项或者?我已经使用这个脚本从这个文件夹编译应用程序.f。
#! /bin/csh -f
set list=`ls *.f`
set FLAG="-o"
echo $list
foreach file (${list})
echo $file
f77 ${file} ${FLAG} ${file:r}
mv ${file:r} ../bin/.
end我改变了这样的声明:
整数行(nnzmax+nszero)、列(nnzmax+nszero)、+nmmax( nzimax)、florsm(nzimax)、+ data florsm /nzimax*2/实λ、imodel(nximax、nzimax)、dm(nmmax)、+ dum1(nmmax)、dum2(nmmax)、data(ndmax+nsconst)、+ anz(nnzmax+nszero)、模型(nzimax、nzimax)、+ data smwz /nzimax*-1./、+ data spwz /nzimax*-1.
但我还是有
Error on line 50: attempt to give DATA in type-declaration
Error on line 53: attempt to give DATA in type-declaration
Error on line 385: Declaration error for smwz: used as variable
Error on line 385: Declaration error for smwz: may not appear in namelist
Error on line 385: Declaration error for spwz: used as variable
Error on line 385: Declaration error for spwz: may not appear in namelist发布于 2015-09-21 13:16:34
这个片段,和后来类似的片段
florsm(nzimax)/nzimax*2/看起来是一种用合并到声明中的data语句初始化变量的非标准方法。一种更标准的方法将两者分开,类似于
florsm(nzimax)
...
data florsm /nzimax*2/使用Intel Fortran编译器的好处之一是其悠久的历史;在此过程中,它已经并将继续接受各种非标准特性。我猜这就是其中之一,你提到的另一个编译器是不能接受的。
当然,这似乎是错误声明告诉我们的。
标准的替换可能是
florsm(nzimax) = 2但是,这利用了Fortran 90的一个特性,这种特性被称为fort77,但它也可能无法理解。
https://stackoverflow.com/questions/32695563
复制相似问题