2013-12-01 4 views
0

Я пытаюсь скомпилировать код fortran. Он проанализирует X-файл в Y-каталоге и затем создаст новый файл Z с результатами. Но происходит что-то не так.Недопустимое имя символа в (1)

Когда я пишу каталог я вижу, что это слишком много для одной линии, а затем я пытаюсь продолжить его в следующем этом:

namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/' 
    +   'espec.fits' 

Но, когда я пытаюсь скомпилировать с помощью команды

gfortran Codigo.f -o TESTE -Lcfitsio -lcfitsio

Я получаю сообщение об ошибке:

+   'espec.fits'           
    1 

Error: Invalid character in name at (1)

Может кто-нибудь мне помочь? На самом деле я не знаю, что это за ошибка. Справочник на 100% прав. И когда я перемещаю архивы в более простой каталог, чтобы писать все в одной строке, он работает! Так что-то не так с «+»?

спасибо.

Edit1

На самом деле, когда я добавить "&" в конце строки, это дает мне сообщение об ошибке:

namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/'&  
1 

Error: Unclassifiable statement at (1) Codigo.f:60.7:

+   'espec.fits'           
    1 

Error: Invalid character in name at (1)

И с "//":

namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/'// 
                    1 

Error: Syntax error in expression at (1) Codigo.f:60.7:

+   'espec.fits'           
    1 

Error: Invalid character in name at (1)

Редакция 2

Большое вам спасибо за помощь. Ну, я решил проблему переключиться на форму «.f90».

Еще один вопрос: знаете ли вы, почему он не распознает «c» для комментариев в коде? Еще раз спасибо! :)

+0

Он не распознает комментарии 'C', потому что комментарии в свободной форме выполняются с помощью'! '. Вы должны изменить их или исправить только свою оригинальную проблему и придерживаться источника с фиксированной формой. –

ответ

3

Эта часть вашей компиляции заявления:

gfortran Codigo.f 

будет рассматривать исходный файл, с суффиксом .f как фиксированного источника формы. Это означает, что продолжение линия обозначается любым символом (кроме пробела или 0) в колонке 6.

Однако сообщение об ошибке вы получаете предположить, что + во второй строке вашего сниппета не в колонке 6 и что компилятор рассматривает его как начальный символ в новом имени объекта, для которого он недопустим. Тот факт, что + выровнен по вертикали с n в предыдущей строке, усиливает мое подозрение, что это может быть причиной вашей проблемы.

Добавление амперсанда, как предлагается в теперь удаленном ответе, на самом деле не помогает в этом случае, если вы продолжаете сообщать компилятору, что он имеет дело с исходным файлом с фиксированной формой. & используется только для продолжения в исходных файлах свободной формы. Добавление оператора строки-конкатенации, //, не помогает, так как за ним не следует другая строка, но заканчивается строка. //& поможет, но, вероятно, не нужно.

Я думаю, что у вас есть 2 возможных решения, но выбрать только один:

  1. Стик с фиксированной формой и получить правильное выравнивание.
  2. Измените суффикс файла на .f90, который вызовет gfortran для обработки исходного файла как свободной формы.

Если вы идете на вариант 2 (который я бы рекомендовал), вы можете либо использовать & в конце строки, либо просто объединить линии. В свободной форме максимальная длина строки составляет 132 символа.

1

Добавление ответа Высокая производительность Марка:

Если вы по-прежнему с FORTRAN 77, большинство компиляторов имеют возможность увеличить допустимую длину линии, например, для -ffixed-form -ffixed-line-length-none gfortran. Как уже говорилось, Fortran> = 90 имеет длину строки 132, поэтому вам не нужно разделить линию.

Наконец, если вы хотите разделить линию в Fortran> = 90, вам потребуются два амперсанда. В большинстве случаев вам нужен один, но для разделения строки вам нужно два:

namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/& 
&espec.fits' 
Смежные вопросы