Можно ли отформатировать 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