如以下我用于练习固定格式Fortran的代码所示(因为我要学习的代码是固定格式Fortran),所以新添加了第4个格式语句和从文件1中读取的内容。代码在添加这些语句之前按预期工作,但是现在没有附加标志的intel ifort编译器将无法编译第4个format语句,并返回以下错误:
fortPractice.for(18): error #5082: Syntax error, found FORMAT_ELEMENT 'format' when expecting one of: <END-OF-STATEMENT> ;
4 format(i6,2x)
--------------^
fortPractice.for(26): error #6052: This label has not been defined as a FORMAT label.
write(2,3)
----------------------------------^
代码是:
c This is a script for practicing Fortran codes
program fortPractice
implicit none
integer :: x(0:5),y(2:7)
integer :: nph(1:6)
real :: z(4:9)
integer :: i
OPEN(unit=1,file='test.txt',status='old')
read(1,*) nph
close(unit=1)
open(unit = 2, file = 'output.txt')
2 format(i3,2x,i3,2x,2e11.2)
3 format(1x,78('*'))
4 format(i6,2x)
do i = 0,5
x(i) = i;
y(i+2) = i+2;
z(i+4) = x(i)**2 + y(i+2)**2
z(i+4) = sqrt(z(i+4)) + 10000
write(2,2) x(i),y(i+2),z(i+4)
write(2,3)
enddo
write(2,*) nph
close(unit = 2)
endprogram fortPractice
输出是程序创建的文件。 test.txt仅包含一行数字:1 2 3 4 5 6
当我注释或删除第4个format语句时,代码将按预期编译并运行。在我刚刚学习固定形式的Fortran的工作方式时,我只对第4格式的语句为何无法编译感兴趣。
编辑: 我已经用空格替换了所有选项卡,并且可以对下面所示的内容进行一些修改,但是现在可以编译该程序,但是该程序不会生成输出文件,可能会遇到一些运行时错误:
编辑2: 没关系,我忘了更改文件标识符。
谢谢大家!
答案 0 :(得分:1)
现在我们有足够的信息来解决问题。在麻烦的源代码行中,标签4前面有一个制表符。 Fortran源代码中的选项卡不是标准的,但是Intel Fortran(和许多其他编译器)支持称为“选项卡源形式”的内容。在ifort中的工作方式如下:
在您的情况下,制表符位于4之前,因此被视为前一行的延续,从而导致错误。不要使用制表符,或者不要理解编译器如何对待它们。自动插入标签的编辑器只会给您带来麻烦。