英特尔编译器 returns "Found Format_element when Expected end of statement"

Intel Compiler returns "Found Format_element when Expected end of statement"

如下我练习定型Fortran的代码所示(因为我要学习的代码是定型Fortran),新增第4条格式语句和从文件1中读取。在添加这些语句之前代码按预期工作,但现在没有附加标志的英特尔 ifort 编译器将不会编译第 4 条格式语句和 returns 以下错误:

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 条格式语句时,代码会按预期进行编译和 运行s。因为我只是在学习固定形式的 Fortran 是如何工作的,所以我只对第 4 种格式语句无法编译的原因感兴趣。

编辑: 我用空格替换了所有制表符,下面显示的经过更多修改的程序现在可以编译,但程序不生成输出文件,可能遇到一些 运行-time 错误:

编辑 2: 没关系,我忘了更改文件标识符。

谢谢大家!

现在我们有足够的信息来解决这个问题。在麻烦的源代码行中,标签 4 前面有一个制表符。 Fortran 源代码中的选项卡不是标准的,但英特尔 Fortran(和许多其他编译器)支持称为 "tab source form" 的东西。它在ifort中的工作方式如下:

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

在您的例子中,制表符位于 4 之前,因此它被认为是上一行的延续,从而导致错误。要么不使用制表符,要么了解编译器如何处理它们。自动插入标签的编辑器只会给你带来麻烦。