英特尔编译器返回“预期语句结束时找到格式_元素”

时间:2018-06-28 16:01:04

标签: fortran intel-fortran

如以下我用于练习固定格式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: 没关系,我忘了更改文件标识符。

谢谢大家!

1 个答案:

答案 0 :(得分:1)

现在我们有足够的信息来解决问题。在麻烦的源代码行中,标签4前面有一个制表符。 Fortran源代码中的选项卡不是标准的,但是Intel Fortran(和许多其他编译器)支持称为“选项卡源形式”的内容。在ifort中的工作方式如下:

  • 如果该行以制表符开头,然后是非零数字,则该数字将被视为第6列中的数字
  • 如果该行以制表符开头,然后是其他字符,则该字符将被视为第7列中的字符
  • 如果该行以数字语句标签开头,然后以制表符开头,则将下一个字符视为第7列中的字符
  • 否则,制表符被视为空白(最后一个在编译器中有所不同)

在您的情况下,制表符位于4之前,因此被视为前一行的延续,从而导致错误。不要使用制表符,或者不要理解编译器如何对待它们。自动插入标签的编辑器只会给您带来麻烦。