Предварительная обработка Fortran с помощью компилятора Portland

#preprocessor #fortran

#препроцессор #fortran

Вопрос:

Я пытаюсь предварительно обработать модуль Fortran (pmu.F90) с помощью pgf90. Модуль выглядит следующим образом:

 module pmu

   module variables

contains

   include 'file.F90'

end module 
  

file.F90 это подпрограмма, которая содержит следующие строки:

  #ifdef PART  

    startm1 = xstart - 1

    startm2 = xstart - 2

    endp1   = xend   1

    endp2   = xend   2 

 #else    

    startm1 = xstart - 1

    startm2 = xstart - 1

    endp1   = xend   1

    endp2   = xend   1 

 #endif 
  

Если я скомпилирую с:

 pgf90  -DPART    -Mfree -Mbounds -Msave -Mdclchk -r8 -Mpreprocess  -I/data/users/mrosso/fftw3/include    -c pmu.F90
  

Я получаю

 PGF90-S-0021-Label field of continuation line is not blank.
  

Ответ №1:

Что ж, включенный файл не содержит процедур, что вам и нужно между инструкциями «contains» и «end module» в файле модуля pmu.

Еще одна проблема при использовании CPP с Fortran заключается в том, что оператор Fortran include отличается от CPP #include. В частности, их взаимодействие не указано. То есть, если вы включаете файл, который сам по себе содержит директивы CPP, становится на одну ошибку меньше, если вместо этого вы используете #include .

Комментарии:

1. В OP указано, что «файл. F90′ содержит подпрограмму. Если я правильно понимаю, фрагмент кода, который он показал, — это всего лишь часть, а не все целиком. Я согласен с вами в том, что вы сказали о взаимодействии между CPP и оператором Fortran include.