Может ли объявление CHARACTER и его оператор DATA находиться перед оператором IMPLICIT? - PullRequest
2 голосов
/ 28 октября 2019

FORTRAN был моим первым языком программирования в 1970-х, но я не могу определить, действителен ли следующий код FORTRAN. У меня нет возможности скомпилировать или запустить код.

    SUBROUTINE ABC(PARM1, PARM2)
    CHARACTER*40 projName 
    DATA projName /'...values...'/

C Lots of comments...

C VARIABLE DECLARATIONS BEGIN HERE (the exact wording)

    IMPLICIT REAL*8(A-H,O-Z)
    (the rest of the declarations)
    . . .

Все ссылки говорят, что оператор IMPLICITдолжен прийти перед любыми заявлениями;тем не менее, этот код, по-видимому, работает. Я думаю, что либо (1) оператор IMPLICIT игнорируется, либо (2) этот код действителен в некоторой разновидности FORTRAN. Если IMPLICIT игнорируется, флаги компиляции можно было бы использовать для той же цели.

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

Спасибо, лак

1 Ответ

1 голос
/ 28 октября 2019

Тип CHARACTER был введен в Fortran 77. В разделе 3.5 «Порядок операторов и строк» ​​в Fortran 77 говорится: «В операторах спецификации программного модуля операторы IMPLICIT должны предшествовать всем другим операторам спецификации, кроме операторов PARAMETER.»

Аналогичные ограничения существуют в более поздних стандартах.

Код, как описано, не соответствует.

(Fortran 77 не требовал, чтобы процессоры Fortran диагностировали даже самые основные из языковых правил. AКомпилятор, возможно, принял другой порядок операторов в качестве расширения или случайно.)

...