Компилятор Intel возвращает "Found Format_element, когда ожидается конец оператора" - PullRequest
0 голосов
/ 28 июня 2018

Как показано в следующем коде, который я использую для практики Фортрана с фиксированной формой (потому что код, который я пытаюсь выучить, является фиксированной формой с Фортрана), оператор 4-го формата и чтение из файла 1 были добавлены заново. До добавления этих операторов код работал должным образом, но теперь компилятор Intel ifort без дополнительных флагов не скомпилирует оператор 4-го формата и выдаст следующую ошибку:

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-го формата, код компилируется и запускается, как и ожидалось. Поскольку я только изучаю, как работает фиксированная форма Fortran, меня просто интересует, почему оператор 4-го формата не скомпилируется.

Edit: Я заменил все вкладки пробелами, и программа с некоторыми другими изменениями, показанными ниже, теперь может компилироваться, но программа не создает выходной файл, вероятно, возникла некоторая ошибка времени выполнения:

Редактировать 2: Неважно, я забыл изменить идентификаторы файлов.

Спасибо всем!

1 Ответ

0 голосов
/ 28 июня 2018

Теперь у нас достаточно информации для решения проблемы. В строке проблемного источника метке 4 предшествует вкладка. Вкладки в исходном коде Фортрана не являются стандартными, но Intel Fortran (и многие другие компиляторы) поддерживают то, что называется «формой исходного кода вкладок». В ifort это работает следующим образом:

  • Если строка начинается с табуляции, а затем с ненулевой цифрой, эта цифра обрабатывается так, как если бы она была в столбце 6
  • Если строка начинается с табуляции, а затем с каким-либо другим символом, то этот символ обрабатывается так, как если бы он был в столбце 7
  • Если строка начинается с метки числового оператора, а затем с табуляции, следующий символ обрабатывается так, как если бы он был в столбце 7
  • В противном случае вкладка обрабатывается как пустая (последняя зависит от компилятора)

В вашем случае табуляция предшествует 4, поэтому она считается продолжением предыдущей строки, что приводит к ошибке. Либо не используйте вкладки, либо не понимайте, как их обрабатывает компилятор. Редакторы, которые автоматически вставляют вкладки, просто доставят вам неприятности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...