Пробелы больше не разрешены в именах переменных - PullRequest
0 голосов
/ 01 мая 2020

Когда я был в Uni, в Fortran IV, у нас была возможность написать такую ​​программу, как эта

      program main
      integer his days, her days, total of days

      his days = 15
      her      days = 25
      total of days = his     days + herdays

      write(5,100) total of days
100   format(1X, I10)
      stop
      end program

Я пытался создать ее как программу F77, и она компилировалась и запускалась. Я не знаю, были ли пробелы явно разрешены в F77, но я помню, как писал программы с пробелами в переменных в Fortran IV (66). Он собирает и работает в gfortran, Powerstation 4, Silverfrost и старом компиляторе g77. Предположительно, он будет работать и на компиляторе IVF (поскольку в предыдущей жизни IVF был Powerstation4). У меня нет доступа к одному прямо сейчас. Если я скажу компилятору, что это программа F90 / 95 ..., она даже не скомпилируется.

f90test.f90:2:17:

   integer his days, her days, total of days
             1
Error: Syntax error in data declaration at (1)
f90test.f90:4:6:

   his days = 15
  1
Error: Unclassifiable statement at (1)
f90test.f90:5:6:

   her      days = 25
  1
Error: Unclassifiable statement at (1)
f90test.f90:6:6:

   total of days = his     days + herdays
  1
Error: Unclassifiable statement at (1)
f90test.f90:8:21:

   print *, total of days
                 1
Error: Syntax error in PRINT statement at (1)

Два вопроса:

  1. , допускаются ли пробелы в переменной имена в F77? Все ссылки, которые я могу найти, на самом деле не говорят, что пробелы были разрешены, или, может быть, авторы не знали, что пробелы были разрешены
  2. были ли пробелы в именах переменных, исключенные в F90?

1 Ответ

2 голосов
/ 01 мая 2020

Когда вы используете расширение .f90, оно рассматривается как исходный файл произвольной формы. В свободной форме пробел имеет значение. Эта исходная форма была введена в Fortran 90. Для обратной совместимости ключевые слова доступны как в режиме разделения, так и в режиме разделения (GOTO и GO TO, END IF и ENDIF). Однако идентификаторы (имена) не могут содержать пробелы в этой исходной форме.

Используйте .f или .for для исходных файлов фиксированной формы, если вы хотите его использовать. Лучше обратиться к руководству вашего компилятора, какие расширения это позволяет. Фиксированная исходная форма все еще является действительной исходной формой сегодня, хотя она помечена как устаревшая в Fortran 2018. Пробелы не имеют никакого значения в форме с фиксированным исходным кодом, даже если это код Fortran 90 или даже код Fortran 2018.

Обратите внимание, что сегодня компиляторы компилируют большинство кодов как новый стандарт (2003, 2008 или 2018), независимо от того, что это расширение. Примечательно, что расширение .f90 не считается Fortran 90, оно просто отмечает форму исходного файла в большинстве (или во всех?) Компиляторах. См. Также Правильный суффикс для исходного файла Fortran 2003 - компилятор Intel Fortran Это соглашение об именах не определено стандартом, но довольно универсально.

...