Spec-Zone.ru › GNU Fortran 13

2.4 Параметры для запроса или подавления ошибок и предупреждений

Ошибки — это диагностические сообщения, указывающие, что компилятор GNU Fortran не может скомпилировать соответствующий фрагмент исходного кода. Компилятор продолжит обработку программы, пытаясь сообщить дополнительные ошибки для помощи в отладке, но не будет производить никакого скомпилированного вывода.

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

Вы можете запросить многие конкретные предупреждения с помощью параметров, начинающихся с -W, например, -Wimplicit, чтобы запросить предупреждения о неявных объявлениях. Каждый из этих конкретных параметров предупреждений также имеет отрицательную форму, начинающуюся с -Wno-, чтобы отключить предупреждения; например, -Wno-implicit. В этом руководстве приводится только один из двух вариантов, который не является значением по умолчанию.

Эти параметры управляют объёмом и видами ошибок и предупреждений, генерируемых GNU Fortran:

-fmax-errors=n

Ограничивает максимальное количество сообщений об ошибках до n, после чего GNU Fortran прерывает работу, вместо попытки продолжить обработку исходного кода. Если n равно 0, ограничений на количество сообщений об ошибках нет.

-fsyntax-only

Проверяет код на синтаксические ошибки, но не компилирует его. Это сгенерирует файлы модулей для каждого модуля в коде, но не сгенерирует других выходных файлов.

-Wpedantic
-pedantic

Выдает предупреждения об использовании расширений языка Fortran. -pedantic также применяется к конструкциям языка C, встречающимся в исходных файлах GNU Fortran, например, использованию ‘\e’ в символьной константе внутри директивы, подобной #include.

Корректные программы Fortran должны компилироваться с этим параметром и без него. Однако без этого параметра поддерживаются некоторые расширения GNU и традиционные функции Fortran. С этим параметром многие из них будут отклоняться.

Некоторые пользователи пытаются использовать -pedantic для проверки соответствия программ стандарту. Они быстро обнаруживают, что это не совсем то, что они ожидали — это находит некоторые нестандартные практики, но не все. Однако улучшения GNU Fortran в этой области приветствуются.

Этот параметр следует использовать в сочетании с -std=f95, -std=f2003, -std=f2008 или -std=f2018.

-pedantic-errors

Подобно -pedantic, за исключением того, что генерируются ошибки, а не предупреждения.

-Wall

Включает распространённые параметры предупреждений, касающиеся практик, которые мы рекомендуем избегать и считаем легко устранимыми. В настоящее время это включает в себя -Waliasing, -Wampersand, -Wconversion, -Wsurprising, -Wc-binding-type, -Wintrinsics-std, -Wtabs, -Wintrinsic-shadow, -Wline-truncation, -Wtarget-lifetime, -Winteger-division, -Wreal-q-constant, -Wunused и -Wundefined-do-loop.

-Waliasing

Предупреждает о возможной алиасизации параметров-аргументов. В частности, он предупреждает, если один и тот же фактический аргумент связан с параметром-аргументом с INTENT(IN) и параметром-аргументом с INTENT(OUT) в вызове с явным интерфейсом.

Следующий пример вызовет предупреждение.

interface
  subroutine bar(a,b)
    integer, intent(in) :: a
    integer, intent(out) :: b
  end subroutine
end interface
integer :: a

call bar(a,a)
-Wampersand

Предупреждает об отсутствии амперсанда в продолженных символьных константах. Предупреждение выдаётся при использовании -Wampersand, -pedantic, -std=f95, -std=f2003, -std=f2008 и -std=f2018. Примечание: без амперсанда в продолженной символьной константе GNU Fortran предполагает продолжение с первой некомментарной, непробельной символом после амперсанда, который инициировал продолжение.

-Warray-temporaries

Предупреждает о временных массивах, сгенерированных компилятором. Информация, генерируемая этим предупреждением, иногда полезна при оптимизации для избежания таких временных массивов.

-Wc-binding-type

Предупреждает, если переменная может не быть совместимой с C. В частности, предупреждает, если переменная объявлена с использованием внутреннего типа с неявным типом, вместо использования параметра типа для совместимости с C, определённого в внутреннем модуле ISO_C_Binding. Этот параметр подразумевается параметром -Wall.

-Wcharacter-truncation

Предупреждает, когда присваивание символьной переменной будет усекать присвоенную строку.

-Wline-truncation

Предупреждает, когда строка исходного кода будет усечена. Этот параметр подразумевается параметром -Wall. Для исходного кода в свободном формате значение по умолчанию — -Werror=line-truncation, так что усечение рассматривается как ошибка.

-Wconversion

Предупреждает об неявных преобразованиях, которые, вероятно, изменят значение выражения после преобразования. Подразумевается параметром -Wall.

-Wconversion-extra

Предупреждает об неявных преобразованиях между различными типами и видами. Этот параметр не подразумевает -Wconversion.

-Wextra

Включает некоторые параметры предупреждений для использования функций языка, которые могут быть проблемными. В настоящее время это включает -Wcompare-reals, -Wunused-parameter и -Wdo-subscript.

-Wfrontend-loop-interchange

Предупреждает при использовании -ffrontend-loop-interchange для перестановки циклов.

-Wimplicit-interface

Предупреждает, если процедура вызывается без явного интерфейса. Обратите внимание, что это проверяет только наличие явного интерфейса. Это не проверяет, что объявленные интерфейсы согласованы между модульными единицами.

-Wimplicit-procedure

Предупреждает, если процедура вызывается без явного интерфейса или не объявлена как EXTERNAL.

-Winteger-division

Предупреждает, если целочисленное деление констант усекает результат. Например, 3/5 вычисляет 0.

-Wintrinsics-std

Предупреждает, если gfortran находит процедуру с именем, подобным встроенной, недоступной в текущем выбранном стандарте (с -std) и рассматривает её как EXTERNAL процедуру по этой причине. -fall-intrinsics может быть использован для того, чтобы никогда не вызывать это поведение и всегда связывать с встроенной процедурой независимо от выбранного стандарта.

-Wno-overwrite-recursive

Не выдавать предупреждений при использовании -fno-automatic с -frecursive. Рекурсия будет нарушена, если соответствующие локальные переменные не имеют атрибута AUTOMATIC явно объявленного. Этот параметр может использоваться для подавления предупреждения, когда известно, что рекурсия не нарушена. Полезно для сред разработки, использующих -Werror.

-Wreal-q-constant

Выдаёт предупреждение, если вещественная константа содержит букву-экспоненту q.

-Wsurprising

Выдаёт предупреждение при обнаружении подозрительных конструкций кода. Хотя они технически законны, они обычно указывают на допущенную ошибку.

В настоящее время это выдаёт предупреждение в следующих случаях:

  • Для конструкции INTEGER SELECT есть CASE, которая никогда не может быть сопоставлена, поскольку её нижнее значение больше её верхнего значения.
  • Для конструкции LOGICAL SELECT есть три инструкции CASE.
  • TRANSFER определяет источник короче назначения.
  • Тип результата функции объявляется более одного раза с тем же типом. Если -pedantic или режим совместимости со стандартом включены, это ошибка.
  • Переменная CHARACTER объявляется с отрицательной длиной.
  • При использовании -fopenmp для кода с фиксированной формой, когда встречается метка расширения от поставщика omx. (Эквивалентная метка ompx, используемая в исходном коде в свободном формате, диагностируется по умолчанию.)
-Wtabs

По умолчанию табуляции принимаются как пробелы, но табуляции не являются частью набора символов Fortran. Для строк продолжения поддерживается табуляция, за которой следует цифра от 1 до 9. -Wtabs выведет предупреждение, если обнаружена табуляция. Примечание: -Wtabs активен для -pedantic, -std=f95, -std=f2003, -std=f2008, -std=f2018 и -Wall.

-Wundefined-do-loop

Предупреждает, если цикл DO с шагом 1 или -1 приводит к переполнению или переполнению при итерации индукционной переменной цикла. Этот параметр подразумевается параметром -Wall.

-Wunderflow

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

-Wintrinsic-shadow

Предупреждает, если пользовательская процедура или процедура модуля имеет то же имя, что и встроенная процедура; в этом случае может потребоваться явный интерфейс или EXTERNAL или INTRINSIC объявление, чтобы вызовы впоследствии были разрешены к желаемой встроенной процедуре/процедуре. Этот параметр подразумевается параметром -Wall.

-Wuse-without-only

Предупреждает, если инструкция USE не имеет квалификатора ONLY и, следовательно, неявно импортирует все публичные сущности используемого модуля.

-Wunused-dummy-argument

Предупреждает об неиспользуемых параметрах-аргументах. Этот параметр подразумевается параметром -Wall.

-Wunused-parameter

В отличие от значения gcc параметра -Wunused-parameter, реализация этого параметра в gfortran не предупреждает об неиспользуемых параметрах-аргументах (см. -Wunused-dummy-argument), а о неиспользуемых PARAMETER значениях. -Wunused-parameter подразумевается параметром -Wextra, если также используется -Wunused или -Wall.

-Walign-commons

По умолчанию gfortran предупреждает о любом случае заполнения переменных для правильного выравнивания внутри блока COMMON. Это предупреждение можно отключить с помощью -Wno-align-commons. См. также -falign-commons.

-Wfunction-elimination

Предупреждает, если оптимизации, включенные параметром -ffrontend-optimize, устраняют все вызовы нечистых функций. Этот параметр подразумевается параметром -Wextra.

-Wrealloc-lhs

Предупреждать, когда компилятор может вставить код для выделения или перераспределения памяти для переменной массива allocatable присваиваемого внутреннего типа в заданиях внутреннего типа. В горячих циклах функция перераспределения Fortran 2003 может снизить производительность. Если массив уже выделен с правильной формой, рассмотрите использование целочисленного массива (например, (:,:,:)) для переменной в левой части, чтобы предотвратить проверку перераспределения. Обратите внимание, что в некоторых случаях предупреждение отображается, даже если компилятор оптимизирует проверки перераспределения. Например, когда правая часть содержит ту же переменную, умноженную на скаляр. См. также -frealloc-lhs.

-Wrealloc-lhs-all

Предупреждать, когда компилятор вставляет код для выделения или перераспределения памяти для allocatable переменной; это включает скаляры и производные типы.

-Wcompare-reals

Предупреждать при сравнении вещественных или комплексных типов на равенство или неравенство. Этот параметр подразумевается параметром -Wextra.

-Wtarget-lifetime

Предупреждать, если указатель в присваивании указателей может быть длиннее, чем его целевой объект. Этот параметр подразумевается параметром -Wall.

-Wzerotrip

Предупреждать, если известно, что цикл DO выполняется ноль раз во время компиляции. Этот параметр подразумевается параметром -Wall.

-Wdo-subscript

Предупреждать, если индекс массива внутри цикла DO может привести к обращению за пределы массива, даже если компилятор не может доказать, что оператор фактически выполняется, в таких случаях, как

real a(3)
do i=1,4
  if (condition(i)) then
    a(i) = 1.2
  end if
end do

Этот параметр подразумевается параметром -Wextra.

-Werror

Преобразует все предупреждения в ошибки.

См. Параметры для запроса или подавления ошибок и предупреждений в руководстве по использованию GNU компилятора (GCC), для получения информации о дополнительных параметрах, предлагаемых общим интерфейсом GBE, используемым gfortran, gcc и другими GNU компиляторами.

Некоторые из этих параметров не имеют эффекта при компиляции программ, написанных на Fortran.

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

Spec-Zone.ru

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