Spec-Zone.ru › GNU Fortran 11

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 явным образом.

-Wreal-q-constant

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

-Wsurprising

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

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

  • В конструкции SELECT для целых типов SELECT конструктор имеет CASE, который никогда не может быть сопоставлен, поскольку его нижнее значение больше верхнего значения.
  • В логическом SELECT конструкторе есть три CASE оператора.
  • TRANSFER указывает источник, который короче назначения.
  • Тип результата функции объявлен более одного раза с тем же типом. Если -pedantic или режим совместимости со стандартом включён, это ошибка.
  • Переменная CHARACTER объявлена с отрицательной длиной.
-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.

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

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

Spec-Zone.ru

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