Spec-Zone.ru › GNU Fortran 10

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

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

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

  • В конструкции SELECT INTEGER есть CASE, который никогда не может быть сопоставлен, так как его нижнее значение больше, чем верхнее.
  • В конструкции SELECT LOGICAL есть три 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’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

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

-Wrealloc-lhs-all

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

-Wcompare-reals

Предупреждает при сравнении типов real или complex на равенство или неравенство. Эта опция подразумевается -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 компиляторами.

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

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

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

Spec-Zone.ru

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