Как сделать правильное заявление данных в Fortran? - PullRequest
0 голосов
/ 15 октября 2018
  subroutine mindef(f)
  implicit real*8(a-h,o-z)
  real*8 r(6),com(3)    
 data r/"en d", "irec","tion","prog","ress","ion "/, &
   & nl , ng , np/"l" , "g" , "p"/, "itra1","itra2"/"*" , " "/  

Я получил следующее сообщение:

fitold.f90:346:39:

        & nl , ng , np/"l" , "g" , "p"/, "itra1","itra2"/"*" , " "/
                                   1
Error: Syntax error in DATA statement at (1)

1 Ответ

0 голосов
/ 16 октября 2018

Оператор данных принимает пары списков объектов и списков значений, где такая пара имеет вид object-list /value-list/.Объекты (исключая случаи данные подразумевают dos ) для инициализации должны быть переменными.В случае формулировки данных вопроса это нарушается вокруг точки маркера сообщения об ошибке.

Давайте посмотрим на формулировку вопроса:

  data r / "en d", "irec","tion","prog","ress","ion "  / , &
!      ^ ^ '----------------------------------------'  ^ ^
!      | |                    '- value list            | '- pair separator
!      | '- separator                                  '- separator       
!      '- variable name
     & nl , ng , np   /  "l" , "g" , "p"   / , "itra1","itra2"  /"*" , " "/
!      '-----------'  ^  '--------------'  ^ ^ '--------------'
!          '- object  |        '- value    | |       '- NOT VARIABLES!
!              list   |            list    | '- pair separator
!                     '- separator         '- separator

Как мы сейчасвидите, у нас есть символьные литералы, в которых компилятор ожидает увидеть имена объектов.


Как комментирует tim18, даже это исправление не сделает фрагмент кода стандартным Fortran.Некоторые компиляторы принимают символьные значения для инициализации / присваивания действительным значениям (и real*8), но это не универсально.

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