我尝试编译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
我曾经使用过这段代码,但它已经与英特尔Fotran编译器一起编译。我搬到了其他国家,所以我没有在这里安装ifort。我现在正在使用fort77。我应该尝试一些编译选项还是?我已经使用这个脚本从这个文件夹中编译app .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), + ireg(nximax),florsm(nzimax), + data florsm / nzimax * 2 / 真正的lambda,imodel(nximax,nzimax),dm(nmmax), + dum1(nmmax),dum2(nmmax),数据(ndmax + nsconst), + anz(nnzmax + nszero),ibmodel(nximax,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
答案 0 :(得分:4)
这个片段,以及后来的类似片段
florsm(nzimax)/nzimax*2/
看起来像是一种非标准的初始化变量的方法,它将一个data
语句合并到声明中。更标准的方法是将两者分开,例如
florsm(nzimax)
...
data florsm /nzimax*2/
使用英特尔Fortran编译器的一个优点是它的悠久历史;一路走来,它已经接受并继续接受各种非标准功能。我猜这是其中之一,你提到的其他编译器都不能接受。
当然,这似乎是错误陈述似乎告诉我们的内容。
标准替换可能是
florsm(nzimax) = 2
但是它利用了Fortran 90功能,这个功能称为fort77
可能也不会理解。