Spec-Zone.ru › GNU Fortran 14

2.3 Включение и настройка предобработки

Многие компиляторы Fortran, включая GNU Fortran, позволяют передавать исходный код через предобработчик C (CPP; иногда также называется предобработчиком Fortran, FPP), чтобы разрешить условную компиляцию. В случае GNU Fortran это традиционный предобработчик GNU C. В системах с сохранением регистра в именах файлов предобработчик автоматически вызывается, если расширение файла равно .F, .FOR, .FTN, .fpp, .FPP, .F90, .F95, .F03 или .F08. Для ручного вызова предобработчика для любого файла используйте -cpp, чтобы отключить предобработку для файлов, где предобработчик запускается автоматически, используйте -nocpp.

Если обработанный файл включает другой файл с инструкцией Fortran INCLUDE, включенный файл не обрабатывается. Для обработки включенных файлов используйте эквивалентную инструкцию предобработчика #include.

Если GNU Fortran вызывает предобработчик, __GFORTRAN__ определено. Макросы __GNUC__, __GNUC_MINOR__ и __GNUC_PATCHLEVEL__ могут использоваться для определения версии компилятора. См. Обзор в разделе Предобработчик C для получения подробностей.

GNU Fortran поддерживает ряд INTEGER и REAL типов kind помимо типов kind, требуемых стандартом Fortran. Доступность каждого данного типа kind зависит от архитектуры. Следующие предопределенные макросы предобработчика могут использоваться для условного включения кода для этих дополнительных типов kind: __GFC_INT_1__, __GFC_INT_2__, __GFC_INT_8__, __GFC_INT_16__, __GFC_REAL_10__, и __GFC_REAL_16__.

Хотя CPP является фактическим стандартом для предобработки кода Fortran, часть 3 стандарта Fortran 95 (ISO/IEC 1539-3:1998) определяет условную компиляцию, которая не широко используется и не поддерживается компилятором GNU Fortran напрямую. Вы можете использовать программу coco для предобработки таких файлов (http://www.daniellnagle.com/coco.html).

Следующие параметры управляют предобработкой кода Fortran:

-cpp
-nocpp

Включить предобработку. Препроцессор автоматически вызывается, если расширение файла равно .fpp, .FPP, .F, .FOR, .FTN, .F90, .F95, .F03 или .F08. Используйте этот параметр для ручного включения предобработки любого типа файла Fortran.

Чтобы отключить предобработку файлов с любым из вышеперечисленных расширений, используйте отрицательную форму: -nocpp.

Препроцессор запускается в традиционном режиме. Любые ограничения формата файла, особенно ограничения на длину строки, также применяются к результату предобработки, поэтому рекомендуется использовать параметры -ffree-line-length-none или -ffixed-line-length-none.

-dM

Вместо обычного вывода сгенерировать список '#define' директив для всех макросов, определённых во время выполнения препроцессора, включая предопределённые макросы. Это даёт возможность узнать, что предопределено в вашей версии препроцессора. Предполагая, что у вас нет файла foo.f90, команда

touch foo.f90; gfortran -cpp -E -dM foo.f90

отобразит все предопределённые макросы.

-dD

Как -dM, за исключением двух моментов: он не включает предопределённые макросы, и он выводит как #define директивы, так и результат предобработки. Оба типа вывода выводятся в стандартный выходной файл.

-dN

Как -dD, но выводит только имена макросов, а не их развёртывания.

-dU

Как dD, за исключением того, что выводятся только те макросы, которые развёртываются или чьё определение проверяется в директивах препроцессора; вывод откладывается до использования или проверки макроса; и '#undef' директивы также выводятся для макросов, которые проверялись, но не были определены на момент проверки.

-dI

Выводить '#include' директивы помимо результата предобработки.

-fworking-directory

Включить генерацию маркеров строк в выводе препроцессора, которые позволят компилятору узнать текущую рабочую директорию во время предобработки. При включении этого параметра препроцессор выведет после начального маркера строки ещё один маркер со значением текущей рабочей директории, за которым следуют две косые черты. GCC будет использовать эту директорию, когда она присутствует в входном файле предобработки, как директорию, выводимую в качестве текущей рабочей директории в некоторых форматах отладочной информации. Этот параметр неявно включается, если включена отладочная информация, но это можно отключить с помощью отрицательной формы -fno-working-directory. Если в командной строке присутствует флаг -P, этот параметр не оказывает влияния, так как #line директивы не выводятся вообще.

-idirafter dir

Искать файлы включаемых файлов в директории dir, но делать это после всех директорий, указанных с помощью -I, и стандартных системных директорий. dir обрабатывается как системная директория включаемых файлов. Если dir начинается с =, то = будет заменено префиксом sysroot; см. --sysroot и -isysroot.

-imultilib dir

Использовать dir как поддиректорию директории, содержащей специфичные для целевой платформы заголовки C++.

-iprefix prefix

Указать prefix в качестве префикса для последующих опций -iwithprefix. Если prefix представляет собой директорию, вы должны включить заключительный '/'.

-isysroot dir

Этот параметр аналогичен параметру --sysroot, но применяется только к файлам заголовков. Для получения дополнительной информации см. параметр --sysroot.

-iquote dir

Искать в dir только файлы заголовков, запрошенные с #include "file"; они не ищутся для #include <file>, перед всеми директориями, указанными с помощью -I, и перед стандартными системными директориями. Если dir начинается с =, то = будет заменено префиксом sysroot; см. --sysroot и -isysroot.

-isystem dir

Искать в dir файлы заголовков после всех директорий, указанных с помощью -I, но перед стандартными системными директориями. Отметить её как системную директорию, чтобы она получала такое же специальное обращение, как и стандартные системные директории. Если dir начинается с =, то = будет заменено префиксом sysroot; см. --sysroot и -isysroot.

-nostdinc

Не искать стандартные системные директории файлов заголовков. Ищутся только директории, указанные с помощью параметров -I (и директория текущего файла, если это уместно).

-undef

Не определять системные или специфичные для GCC макросы. Определёнными остаются стандартные предопределённые макросы.

-Apredicate=answer

Сделать утверждение с предикатом predicate и ответом answer. Эта форма предпочтительнее более старой формы -A predicate(answer), которая всё ещё поддерживается, потому что она не использует специальные символы оболочки.

-A-predicate=answer

Отменить утверждение с предикатом predicate и ответом answer.

-C

Не отбрасывать комментарии. Все комментарии передаются в выходной файл, за исключением комментариев в обработанных директивах, которые удаляются вместе с директивой.

Вы должны быть готовы к побочным эффектам при использовании -C; это заставляет препроцессор обрабатывать комментарии как токены сами по себе. Например, комментарии, появляющиеся в начале строки, которая должна быть директивой, имеют эффект превращения этой строки в обычную строку исходного кода, так как первый токен в строке больше не является '#'.

Предупреждение: в настоящее время обрабатываются только комментарии в стиле C. Препроцессор пока не распознаёт комментарии в стиле Fortran.

-CC

Не отбрасывать комментарии, включая во время развёртывания макросов. Это как -C, за исключением того, что комментарии, содержащиеся внутри макросов, также передаются в выходной файл, где происходит развёртывание макроса.

В дополнение к побочным эффектам параметра -C, параметр -CC заставляет все комментарии в стиле C++ внутри макроса преобразовываться в комментарии в стиле C. Это сделано для предотвращения случайного комментирования оставшейся части строки кода при последующем использовании этого макроса. Параметр -CC обычно используется для поддержки комментариев lint.

Предупреждение: в настоящее время обрабатываются только комментарии в стиле C и C++. Препроцессор пока не распознаёт комментарии в стиле Fortran.

-Dname

Предопределить имя как макрос с определением 1.

-Dname=definition

Содержимое definition токенизируется и обрабатывается так, как будто оно появилось во время фазы трансляции три в '#define' директиве. В частности, определение будет усечено введёнными символами новой строки.

Если вы вызываете препроцессор из оболочки или подобной оболочке программы, вам может потребоваться использовать синтаксис цитирования оболочки для защиты таких символов, как пробелы, которые имеют смысл в синтаксисе оболочки.

Если вы хотите определить макрос, похожий на функцию, в командной строке, запишите его список аргументов с окружающими скобками перед знаком равенства (если он есть). Скобки имеют значение для большинства оболочек, поэтому вам потребуется процитировать опцию. В оболочках sh и csh, -D'name(args...)=definition' работает.

Параметры -D и -U обрабатываются в том порядке, в котором они указаны в командной строке. Все параметры -imacros и -include обрабатываются после всех параметров -D и -U.

-H

Печать имени каждого используемого файла заголовка в дополнение к другим обычным действиям. Каждое имя отступается, чтобы показать, насколько глубоко оно находится в '#include' стеке.

-P

Запретить генерацию маркеров строк в выводе препроцессора. Это может быть полезно при запуске препроцессора на чём-то, что не является кодом C, и будет передано программе, которая может быть сбита с толку маркерами строк.

-Uname

Отменить любое предыдущее определение name, будь то встроенное или предоставленное с помощью параметра -D.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gfortran/Preprocessing-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API