Spec-Zone.ru › GNU Fortran 12

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

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

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

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

Эти опции контролируют количество и типы ошибок и предупреждений, генерируемых GNU Fortran:

-fmax-errors=n

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

-fsyntax-only

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

-Wpedantic
-pedantic

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

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

Некоторые пользователи пытаются использовать -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 объявлена с отрицательной длиной.
-Wtabs

По умолчанию табуляция рассматривается как пробел, но табуляция не является членом набора символов Фортрана. Для продолжения строк поддерживается табуляция, за которой следует цифра от 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

В отличие от значения -Wunused-parameter в gcc, реализация этого параметра в 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

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

-Wrealloc-lhs-all

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

-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 Compiler Collection (GCC), для получения информации о дополнительных параметрах, предлагаемых GBE, используемым gfortran, gcc и другими GNU компиляторами.

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

Далее: Параметры отладки, Предыдущее: Параметры предобработки, Наверх: Вызов GNU Fortran [Оглавление][Индекс]

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

Spec-Zone.ru

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