Spec-Zone.ru › GNU Fortran 8

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 предполагает продолжение в первом символе, отличном от комментария и пробела, после амперсанда, который инициировал продолжение.

-Wargument-mismatch

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

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

-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=f2008ts, -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.

-Wrealloc-lhs

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

-Wrealloc-lhs-all

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

-Wcompare-reals
END_OF_DOCUMENT_MARKER

Предупреждение при сравнении вещественных или комплексных типов на равенство или неравенство. Этот параметр подразумевается параметром -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-8.4.0/gfortran/Error-and-Warning-Options.html

Spec-Zone.ru

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