2.2 Параметры управления диалектом Fortran
Следующие параметры управляют деталями диалекта Fortran, принимаемого компилятором:
-
-ffree-form -ffixed-form-
Указывает структуру, используемую исходным файлом. Свободная структура была введена в Fortran 90. Фиксированная структура традиционно использовалась в более старых программах Fortran. Если ни один из параметров не указан, форма исходного кода определяется расширением файла.
-
-fall-intrinsics -
Этот параметр разрешает использование всех встроенных процедур (включая расширения, специфичные для GNU). Это может быть полезно при использовании -std= для принудительного соответствия стандарту, но получения доступа ко всему набору встроенных функций, доступных с
gfortran. Вследствие этого, -Wintrinsics-std будет проигнорирован, и ни одна пользовательская процедура с тем же именем, что и любая встроенная функция, не будет вызвана, за исключением случаев, когда она явно объявленаEXTERNAL. -
-fallow-argument-mismatch -
Некоторые программы содержат вызовы внешних процедур с несоответствиями между вызовами и определением процедуры или с несоответствиями между различными вызовами. Такой код не соответствует стандарту и обычно отмечается ошибкой. Этот параметр понижает ошибку до предупреждения, которое может быть отключено только отключением всех предупреждений через -w. Только одно вхождение на аргумент отмечается этим предупреждением. -fallow-argument-mismatch подразумевается -std=legacy.
Использование этого параметра настоятельно не рекомендуется. Можно предоставить код, соответствующий стандарту, который допускает различные типы аргументов, используя явный интерфейс и
TYPE(*). -
-fallow-invalid-boz -
Литеральная константа BOZ может встречаться в ограниченном количестве контекстов в соответствии со стандартом Fortran. Этот параметр понижает ошибку до предупреждения и позволяет литеральной константе BOZ появляться там, где стандарт Fortran иначе запрещает ее использование.
-
-fd-lines-as-code -fd-lines-as-comments-
Включить специальное обращение к строкам, начинающимся с
dилиDв исходных файлах с фиксированной формой. Если задан параметр -fd-lines-as-code, они обрабатываются так, как будто в первом столбце есть пробел. Если задан параметр -fd-lines-as-comments, они обрабатываются как комментарии. -
-fdec -
Режим совместимости с DEC. Включает расширения и другие функции, которые имитируют стандартное поведение более старых компиляторов (например, DEC). Эти функции нестандартные и должны быть избегаемы во что бы то ни стало. Подробности реализации этих расширений в GNU Fortran см. в полной документации.
Другие флаги, включенные этим ключом: -fdollar-ok -fcray-pointer -fdec-char-conversions -fdec-structure -fdec-intrinsic-ints -fdec-static -fdec-math -fdec-include -fdec-blank-format-item -fdec-format-defaults
Если -fd-lines-as-code/-fd-lines-as-comments не установлены, то -fdec также устанавливает -fd-lines-as-comments.
-
-fdec-char-conversions -
Включить использование символьных литералов в операциях присваивания и
DATAоперациях для переменных, не являющихся символами. -
-fdec-structure -
Включить DEC
STRUCTUREиRECORD, а такжеUNION,MAP, и точку ('.') в качестве разделителя элементов (в дополнение к '%'). Это предоставляется только для совместимости; типы производных Fortran 90 должны использоваться вместо этого, где это возможно. -
-fdec-intrinsic-ints -
Включить варианты типов B/I/J/K существующих целочисленных функций (например, BIAND, IIAND, JIAND и т. д.). Полный список встроенных функций см. в полной документации.
-
-fdec-math -
Устаревший флаг. Целью этого параметра было включение устаревших математических встроенных функций, таких как COTAN и тригонометрические функции с градусными значениями (например, TAND, ATAND и т. д.) для совместимости со старым кодом. Этот параметр больше не работает. Тригонометрические функции теперь либо входят в Fortran 2023, либо в расширения GNU.
-
-fdec-static -
Включить атрибуты STATIC и AUTOMATIC в стиле DEC для явного указания хранения переменных и других объектов.
-
-fdec-include -
Включить синтаксический анализ INCLUDE как оператора помимо анализа его как строки INCLUDE. При анализе как оператора INCLUDE INCLUDE не обязательно должен находиться на одной строке и может использовать продолжения строк.
-
-fdec-format-defaults -
Включить спецификаторы формата F, G и I без указателей ширины, вместо них будут использоваться ширины по умолчанию.
-
-fdec-blank-format-item -
Включить пробел как элемент формата в конце спецификации формата, то есть ничего после последней запятой.
-
-fdollar-ok -
Разрешить символ ‘$’ как допустимый символ не в начале имени символа. Символы, начинающиеся с ‘$’, отклоняются, поскольку неясно, какие правила применять к неявной типизации, поскольку разные поставщики реализуют разные правила. Использование ‘$’ в
IMPLICITоператорах также отклоняется. -
-fbackslash -
Изменить интерпретацию обратных слешей в строковых литералах с одного символа обратного слеша на escape-символы в стиле C. Следующие комбинации расширяются
\a,\b,\f,\n,\r,\t,\v,\\, и\0до ASCII символов alert, backspace, form feed, newline, carriage return, horizontal tab, vertical tab, обратный слэш и NUL, соответственно. Кроме того,\xnn,\unnnn и\Unnnnnnnn (где каждый n — шестнадцатеричная цифра) преобразуются в соответствующие символы Unicode. -
-fmodule-private -
Установить по умолчанию доступность модульных сущностей к
PRIVATE. Связанные с использованием сущности будут недоступны, пока не будут явно объявлены какPUBLIC. -
-ffixed-line-length-n -
Установить столбец, после которого символы игнорируются в типичных строках с фиксированной формой в исходном файле, и, если
-fno-pad-source, через который пробелы предполагаются (как будто дополнены до этой длины) после концов коротких строк с фиксированной формой.Популярные значения для n включают 72 (стандарт и по умолчанию), 80 (изображение карточки) и 132 (соответствующее «расширенным» параметрам исходного кода в некоторых популярных компиляторах). n также может быть ‘none’, что означает, что вся строка значима и что продолженные символьные константы никогда не имеют неявных пробелов, добавляемых к ним, чтобы заполнить строку. -ffixed-line-length-0 означает то же самое, что и -ffixed-line-length-none.
-
-fno-pad-source -
По умолчанию, в строках с фиксированной формой предполагаются пробелы (как если бы они были дополнены до этой длины) после концов коротких строк с фиксированной формой. Это не делается ни при использовании -ffixed-line-length-0, -ffixed-line-length-none, ни при использовании параметра -fno-pad-source. С любым из этих параметров продолженные символьные константы никогда не имеют неявных пробелов, добавляемых к ним, чтобы заполнить строку.
-
-ffree-line-length-n -
Установить столбец, после которого символы игнорируются в типичных строках со свободной формой в исходном файле. Значение по умолчанию равно 132. n может быть ‘none’, что означает, что вся строка значима. -ffree-line-length-0 означает то же самое, что и -ffree-line-length-none.
-
-fmax-identifier-length=n -
Укажите максимальную допустимую длину идентификатора. Типичные значения — 31 (Fortran 95) и 63 (Fortran 2003 и более поздние версии).
-
-fimplicit-none -
Указывает, что неявная типизация не допускается, если явно не переопределена
IMPLICITоператорами. Это эквивалентно добавлениюimplicit noneв начало каждой процедуры. -
-fcray-pointer -
Включить расширение Cray pointer, которое предоставляет функциональность указателей в стиле C.
-
-fopenacc -
Включить обработку директив OpenACC «!$acc» в Fortran со свободной формой и «!$acc», «c$acc» и «*$acc» в Fortran с фиксированной формой. При указании -fopenacc компилятор генерирует ускоренный код в соответствии с интерфейсом программирования приложения OpenACC v2.6 https://www.openacc.org. Этот параметр подразумевает -pthread, и поэтому поддерживается только на целевых платформах, которые поддерживают -pthread. Параметр -fopenacc подразумевает -frecursive.
-
-fopenmp -
Включить обработку директив OpenMP «!$omp» в Fortran. Кроме того, он включает индикатор условной компиляции «!$» в Fortran. В Fortran с фиксированной формой индикаторы могут также начинаться с «c» или «*». При указании -fopenmp компилятор генерирует параллельный код в соответствии с интерфейсом программирования приложений OpenMP v4.5 https://www.openmp.org. Этот параметр подразумевает -pthread, и поэтому поддерживается только на целевых платформах, которые поддерживают -pthread. -fopenmp подразумевает -fopenmp-simd и -frecursive.
-
-fopenmp-allocators
-
Включает обработку выделения, перевыделения и освобождения памяти для Fortran-переменных с динамическим выделением и указателями, выделенных с помощью конструкций ‘!$omp allocators’ и ‘!$omp allocate’. Файлы, содержащие эти директивы, должны быть скомпилированы с этим параметром в дополнение к -fopenmp. Кроме того, все файлы, которые могут освободить или перевыделить переменную, выделенную с помощью OpenMP-аллокатора, должны быть скомпилированы с этим параметром. Это включает присваивание по умолчанию переменным с динамическим выделением, когда может произойти перевыделение, и освобождение из-за следующих причин: выход из области видимости, явное освобождение, ‘intent(out)’, освобождение выделенных компонентов и т. д. Файлы, не изменяющие статус выделения, или только для компонентов производного типа, не выделенных с помощью этих двух директив, не требуют компиляции с этим параметром. Также не требуют компиляции файлы, обрабатывающие такие переменные после того, как они были освобождены или выделены стандартным Fortran-аллокатором.
-
-fopenmp-simd -
Включает обработку OpenMP-директивы
simd,declare simd,declare reduction,assume,ordered,scanиloop, а также комбинированные или составные директивы сsimdв качестве составляющей и!$ompв Fortran. Кроме того, он включает сенсор условной компиляции ‘!$’ в Fortran. В Fortran с фиксированной формой записи сенсоры также могут начинаться с ‘c’ или ‘*’. Другие OpenMP-директивы игнорируются. Если дополнительно не указан -fopenmp, областьloopпривязывается к текущей области задач независимо от указанногоbind-описания. -
-fno-range-check -
Отключает проверку диапазона результатов упрощения константных выражений во время компиляции. Например, GNU Fortran выдаст ошибку во время компиляции при упрощении
a = 1. / 0. С этим параметром ошибка не будет выдана, иaполучит значение+Infinity. Если выражение оценивается в значение, выходящее за пределы соответствующего диапазона [-HUGE():HUGE()], то выражение заменяется на-Infили+Infсоответственно. Аналогично,DATA i/Z'FFFFFFFF'/приведет к переполнению целого в большинстве систем, но с -fno-range-check значение «перезапишется», иiбудет инициализировано значением -1. -
-fdefault-integer-8 -
Устанавливает стандартные типы целых и логических значений в тип шириной 8 байт. Этот параметр также влияет на вид целочисленных констант, таких как
42. В отличие от -finteger-4-integer-8, он не повышает приоритет переменных с явным указанием типа. -
-fdefault-real-8 -
Устанавливает стандартный тип вещественных чисел в тип шириной 8 байт. Этот параметр также влияет на вид вещественных констант, отличных от double, таких как
1.0. Этот параметр повышает приоритет стандартной шириныDOUBLE PRECISIONи констант double-вещественных чисел, таких как1.d0, до 16 байт, если это возможно. Если-fdefault-double-8указан вместе сfdefault-real-8,DOUBLE PRECISIONи константы double-вещественных чисел не повышаются по приоритету. В отличие от -freal-4-real-8,fdefault-real-8не повышает приоритет переменных с явным указанием типа. -
-fdefault-real-10 -
Устанавливает стандартный тип вещественных чисел в тип шириной 10 байт. Этот параметр также влияет на вид вещественных констант, отличных от double, таких как
1.0. Этот параметр повышает приоритет стандартной шириныDOUBLE PRECISIONи констант double-вещественных чисел, таких как1.d0, до 16 байт, если это возможно. Если-fdefault-double-8указан вместе сfdefault-real-10,DOUBLE PRECISIONи константы double-вещественных чисел не повышаются по приоритету. В отличие от -freal-4-real-10,fdefault-real-10не повышает приоритет переменных с явным указанием типа. -
-fdefault-real-16 -
Устанавливает стандартный тип вещественных чисел в тип шириной 16 байт. Этот параметр также влияет на вид вещественных констант, отличных от double, таких как
1.0. Этот параметр повышает приоритет стандартной шириныDOUBLE PRECISIONи констант double-вещественных чисел, таких как1.d0, до 16 байт, если это возможно. Если-fdefault-double-8указан вместе сfdefault-real-16,DOUBLE PRECISIONи константы double-вещественных чисел не повышаются по приоритету. В отличие от -freal-4-real-16,fdefault-real-16не повышает приоритет переменных с явным указанием типа. -
-fdefault-double-8 -
Устанавливает тип
DOUBLE PRECISIONи константы double-вещественных чисел, такие как1.d0, в тип шириной 8 байт. Ничего не делает, если это уже значение по умолчанию. Этот параметр предотвращает -fdefault-real-8, -fdefault-real-10 и -fdefault-real-16 от повышения приоритетаDOUBLE PRECISIONи констант double-вещественных чисел, таких как1.d0, до 16 байт. -
-finteger-4-integer-8 -
Повышает приоритет всех
INTEGER(KIND=4)сущностей доINTEGER(KIND=8)сущностей. ЕслиKIND=8недоступен, будет выдано сообщение об ошибке. Этот параметр следует использовать с осторожностью, и он может быть неподходящим для ваших кодов. К областям возможных проблем относятся вызовы внешних процедур, выравнивание вEQUIVALENCEи/илиCOMMON, общие интерфейсы, преобразование констант BOZ-литералов и ввод-вывод. Рекомендуется просмотреть промежуточное представление переведённого Fortran-кода, полученного с помощью -fdump-tree-original. -
-freal-4-real-8 -freal-4-real-10-freal-4-real-16-freal-8-real-4-freal-8-real-10-freal-8-real-16-
Повышает приоритет всех
REAL(KIND=M)сущностей доREAL(KIND=N)сущностей. ЕслиREAL(KIND=N)недоступен, будет выдано сообщение об ошибке. Флаги-freal-4-также влияют на стандартный тип вещественных чисел, а флаги-freal-8-также на тип вещественных чисел двойной точности. Все остальные типы вещественных чисел не затрагиваются этим параметром. Повышение приоритета также применяется к вещественным константам-литералам стандартного и двойной точности и указанному значению 4 или 8 соответственно. Однако,-fdefault-real-8,-fdefault-real-10,-fdefault-real-10, и-fdefault-double-8имеют приоритет для стандартного и двойной точности вещественных типов, как для вещественных констант-литералов, так и для объявлений без указания типа. Обратите внимание, что дляREAL(KIND=KIND(1.0))литерал может быть повышен по приоритету, а затем результат может быть повышен ещё раз. Эти параметры следует использовать с осторожностью, и они могут быть неподходящими для ваших кодов. К областям возможных проблем относятся вызовы внешних процедур, выравнивание вEQUIVALENCEи/илиCOMMON, общие интерфейсы, преобразование констант BOZ-литералов, ввод-вывод и вызовы встроенных процедур при передаче значения вkind=-аргумент-заглушку. Рекомендуется просмотреть промежуточное представление переведённого Fortran-кода, полученного с помощью -fdump-fortran-original или -fdump-tree-original. -
-std=std -
Указывает стандарт, которому должен соответствовать программа, который может быть одним из ‘f95’, ‘f2003’, ‘f2008’, ‘f2018’, ‘f2023’, ‘gnu’ или ‘legacy’. Значение по умолчанию для std — ‘gnu’, что определяет надмножество последнего стандарта Fortran, включающее все расширения, поддерживаемые GNU Fortran, хотя будут выдаваться предупреждения о устаревших расширениях, не рекомендуемых для использования в новых кодах. Значение ‘legacy’ эквивалентно, но без предупреждений об устаревших расширениях и может быть полезным для старых нестандартных программ. Значения ‘f95’, ‘f2003’, ‘f2008’, ‘f2018’ и ‘f2023’ соответственно указывают строгое соответствие стандартам Fortran 95, Fortran 2003, Fortran 2008, Fortran 2018 и Fortran 2023; ошибки выдаются для всех расширений, выходящих за рамки соответствующего стандарта языка, а предупреждения выдаются для функций Fortran 77, которые разрешены, но устарели в более поздних стандартах. Устаревший параметр ‘-std=f2008ts’ действует как псевдоним для ‘-std=f2018’. Он присутствует только для обратной совместимости со старыми версиями gfortran и больше не должен использоваться.
-
-ftest-forall-temp -
Улучшает покрытие тестов, принудительно используя временные переменные для большинства присваиваний forall.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gfortran/Fortran-Dialect-Options.html