Что означает этот синтаксис на фортране? - PullRequest
1 голос
/ 15 января 2020

Я работаю над проектом и, поскольку я не программировал на Фортране раньше, я очень много борюсь. Мой профессор дал мне файл кода, который мне нужно исправить, но я не понимаю синтаксис.

Итак, в файле у него есть

         g = some formula,
     1        some formula
     2        * some formula
     3        / some formula.

Что значит 1, 2, 3 , * и / do?

Я спросил своего профессора, и он сказал, что это код Fortran 77 и 1, 2, 3 используются в качестве индексации в столбце 6, а g - в столбце 7, так как Фортран код написан. Но я был очень смущен, почему Fortran 77 принимает код только после столбца 7?

Спасибо за все ответы.

1 Ответ

10 голосов
/ 15 января 2020

Скорее всего, вы смотрите Фиксированное продолжение оператора формы источника , которое является частью Фиксированной формы источника .

Форматирование с фиксированной формой - это старый способ форматирования кода, который до сих пор происходит от старых перфокарт . Строки могут быть длиной всего 72 символа, но иногда вам нужно больше. Следовательно, символ продолжения оператора:

За исключением комментариев, позиция символа 6 используется для обозначения продолжения. Если позиция символа 6 содержит пробел или ноль, строка является начальной строкой новой инструкции, которая начинается в позиции символа 7. Если позиция символа 6 содержит какой-либо символ, кроме пробела или нуля, позиции символа 7–72 в строке представляют собой продолжение предыдущей строки без комментариев.

source: Стандарт Fortran 2018, раздел 6.3.3.3

Какой символ используется в качестве маркера продолжения оператора, зависит от программиста и его стиля. Часто вы видите -характер (&) или -характер ($) или -характер (*), например:

c23456789012345678901234567890123456789012345678901234567890123456789012
      g = something long
     &    + something_longer
     &    + something_even_longer

Однако в действительно старые времена люди часто пронумеровывали свои строки.

c23456789012345678901234567890123456789012345678901234567890123456789012
     0g = something long
     1    + something_longer
     2    + something_even_longer

и из-за ограниченного пространства они удаляли все пробелы, что иногда становится очень запутанным, когда в строке есть цифры:

c23456789012345678901234567890123456789012345678901234567890123456789012
     0g=1.2345+
     10.35697-
     22.5789

Это не добавляет 10.35697 и не вычитает 22.5789, но добавляет 0.35697 и вычитает 2.5789

Использование чисел в качестве маркеров продолжения операторов снова наследуется от перфокарт. Одна перфокарта представляла одно утверждение Фортрана. А на карте были напечатаны номера строк и столбцов (спасибо High Performance Mark за эту информацию)

enter image description here


примечание: звездочка и sla sh в ОП - не что иное, как обычное умножение и деление.

...