Spec-Zone.ru › GNU Fortran 13

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-13.3.0/gfortran/Preprocessing-Options.html

Spec-Zone.ru

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