Spec-Zone.ru › GNU Fortran 14

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 или -std=f2023.

-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 и -std=f2023. Примечание: если в продолженной символьной константе не указан амперсанд, 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

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

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

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

По умолчанию табуляции принимаются как пробелы, но табуляции не являются частью набора символов Fortran. Для строк продолжения поддерживается табуляция, за которой следует цифра от 1 до 9. -Wtabs вызовет предупреждение, если встретится табуляция. Обратите внимание, что -Wtabs активен для -pedantic, -std=f95, -std=f2003, -std=f2008, -std=f2018, -std=f2023 и -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’s значения -Wunused-parameter, gfortran’s реализация этого параметра не предупреждает об неиспользуемых аргументах-фиктивных параметрах (см. -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
END_OF_DOCUMENT_MARKER

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

-Wrealloc-lhs-all

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

-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-14.2.0/gfortran/Error-and-Warning-Options.html

Spec-Zone.ru

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