Можно ли отформатировать CPP-инструкцию для форматирования в Fortran?
Я новичок в использовании инструкции для форматирования Fortran и задаю вопрос, который, вероятно, довольно родной. Можно ли отменить форматирование фортрана? Я тестировал с помощью Gfortran 4.8.1 на Linux (openSUSE Leap), и оказалось, что он вообще не может быть отступом.
Следующий код main.f90 работает с gfortran -cpp main.f90 -o main
:
program main
implicit none
#ifdef DEBUG
print *, "I am in debug mode"
#endif
print *, "hello world!"
end program main
Но следующее вызывает ошибку:
program main
implicit none
#ifdef DEBUG
print *, "I am in debug mode"
#endif
print *, "hello world!"
end program main
Сообщение об ошибке Error: Invalid character in name at (1)
.
Означает ли это, что мы всегда должны писать инструкцию предварительной обработки из первого начала строки или это просто правило для компилятора? Любая помощь будет очень признательна и заблаговременно!
Ответы
Ответ 1
Нет, они не могут быть отступом, потому что gfortran запускает CPP в традиционном режиме, который не позволяет отступать. Они всегда должны начинаться в первом столбце.
Вы можете запускать CPP вручную, но будьте очень осторожны.
Если вы используете оператор конкатенации //
где-то, препроцессор будет рассматривать его как комментарий. Вы должны использовать флаг -C
, как показано @ewcz в его/ее ответе, который отключает отбрасывание комментариев.
Некоторые компиляторы поставляют собственный препроцессор FPP, который ведет себя по-разному.
Ответ 2
вы могли бы использовать препроцессор C
для выполнения обработки и затем скомпилировать обработанный файл, то есть предположив, что ваша программа находится в main.f90
, тогда что-то вроде:
cpp -nostdinc -C -P -w main.f90 > _main.f90
gfortran -o main _main.f90
В этой связи этот вопрос весьма полезен: Отступы #defines