Продолжение линии с pgfortran
Я пытаюсь скомпилировать файл с pgf90 или pgfortran(который может обрабатывать все виды исходных файлов, например, f90 или f77), который написан с помощью конструкций fortran 77 (то есть имеет расширение.f). У меня вопрос с продолжением строки.
open(10,file='/home/adaba/original/potentialenergy/vorticity/data/run/fort.10')
Так что эта строка явно выходит за пределы столбца 72. Вот что я попробовал. Я попытался разбить это на две строки, используя символ '&' в столбце 6 в новой строке, и скомпилировал его. Он прекрасно компилируется, но когда я запускаю программу, я получаю сообщение об ошибке, говорящее, что такой файл не найден, потому что он интерпретирует продолжение строки как дополнительный пробел между run и fort.10 и сообщает, что файл не найден.
Поэтому я сохранил код в одной строке, а затем добавил -Mextend, которая является специфической для pgi инструкцией для расширения строки. Теперь, кажется, добавить некоторые странные символы в конец имени другого файла намного позже в подпрограмме. Он правильно открывает fort.10, но не может открыть другой файл гораздо позже в коде и добавляет некоторые странные символы в конец этого файла (в двоичном виде). В Emacs, который является моим редактором, я вижу только фиолетовый цвет после оператора fort.10 (что указывает на то, что что-то не так).
Может ли кто-нибудь с опытом работы с pgi fortran помочь?
ОБНОВИТЬ
open(10,file='/home/adabas/originalPV/potentialenergy/vorticity/' // &
& 'data/run/fort.10')
Я получаю синтаксическую ошибку pgf90-s-0034 в или около &(в верхней строке)
Pgf версия 17.0.4 64 бит
2 ответа
Вдобавок ко мне, есть пара вещей, которые я бы попробовал в первую очередь.
Вы можете запросить компилятор разрешить fixed format
(.f) файлы должны быть длиннее 72 символов. В PGI это делается с помощью -Mextend
флаг компилятора.
Кроме того, вы должны иметь возможность построить имя файла, разделив его на две строки. Что-то вроде:
open(10,file='/home/adaba/original/' //
& 'potentialenergy/vorticity/data/run/fort.10')
где //
является оператором для объединения строк. Есть и другие способы сделать это - вы можете определить символьную строку как fname
во-первых, например.
Более подробно об ответе @Ross выше: в свободном формате Fortran есть другой способ: вы можете использовать синтаксис продолжения STRING, как показано ниже:
open(10,file = "/home/adaba/original/&
&potentialenergy/vorticity/data/run/fort.10" )
Здесь есть только одна строка, разделенная на две строки. Пустое пространство между двумя амперсандами полностью игнорируется. Но все, что находится до первого и после второго амперсандов, даже пробел, считается частью строки.