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 95. -pedantic также применяется к конструкциям языка C, где они встречаются в исходных файлах GNU Fortran, таких как использование ‘\e’ в символьной константе внутри директивы, такой как
#include.Программа на Fortran 95 должна компилироваться корректно как с этой опцией, так и без неё. Однако, без этой опции также поддерживаются определённые расширения GNU и традиционные особенности Fortran. С этой опцией многие из них будут отклоняться.
Некоторые пользователи пытаются использовать -pedantic для проверки программ на соответствие стандарту. Они вскоре обнаруживают, что она не делает ровно то, что они хотят – она находит некоторые нестандартные практики, но не все. Однако, улучшения GNU Fortran в этой области приветствуются.
Это следует использовать в сочетании с -std=f95, -std=f2003 или -std=f2008.
-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. Примечание: Без амперсанда в продолжении символьной константы GNU Fortran предполагает продолжение в первой некомментарийной, не пробельной позиции после амперсанда, который инициировал продолжение.
-Wargument-mismatch-
Выдает предупреждение о несовпадении типов, рангов и других несоответствиях между формальными параметрами и фактическими аргументами функций и подпрограмм. Эти предупреждения рекомендуются и поэтому включены по умолчанию.
-Warray-temporaries-
Выдает предупреждение о временных массивах, сгенерированных компилятором. Информация, сгенерированная этим предупреждением, иногда полезна при оптимизации, чтобы избежать таких временных массивов.
-Wc-binding-type-
Выдает предупреждение, если переменная может быть несовместима с C. В частности, предупреждает, если переменная была объявлена с использованием внутреннего типа с типом по умолчанию вместо использования параметра kind, определённого для совместимости с C, в внутреннем модуле
ISO_C_Binding. Эта опция подразумевается опцией -Wall. -Wcharacter-truncation-
Выдает предупреждение, когда при присваивании символьной переменной строка будет обрезана.
-Wline-truncation-
Выдает предупреждение, когда строка исходного кода будет обрезана. Эта опция подразумевается опцией -Wall. Для кода в свободном формате по умолчанию установлено значение -Werror=line-truncation, так что обрезки будут выводиться как ошибки.
-Wconversion-
Выдает предупреждение об неявных преобразованиях, которые, вероятно, изменят значение выражения после преобразования. Подразумевается -Wall.
-Wconversion-extra-
Выдает предупреждение об неявных преобразованиях между различными типами и видами. Эта опция не подразумевает -Wconversion.
-Wextra-
Включает некоторые опции предупреждений для использования функций языка, которые могут быть проблемными. В настоящее время это включает -Wcompare-reals и -Wunused-parameter.
-Wimplicit-interface-
Выдает предупреждение, если процедура вызывается без явного интерфейса. Обратите внимание, что это только проверяет наличие явного интерфейса. Это не проверяет, что объявленные интерфейсы согласованы между программами.
-Wimplicit-procedure-
Выдает предупреждение, если процедура вызывается без явного интерфейса и не объявлена как
EXTERNAL. -Winteger-division-
Выдает предупреждение, если целочисленное деление с константами приводит к обрезке результата. Например, 3/5 оценивается как 0.
-Wintrinsics-std-
Выдает предупреждение, если
gfortranобнаруживает процедуру с именем, аналогичным имени внутреннего модуля, недоступному в текущем выбранном стандарте (с -std), и обрабатывает её какEXTERNALпроцедуру из-за этого. -fall-intrinsics может быть использован для предотвращения этого поведения и всегда связывает с внутренним модулем независимо от выбранного стандарта. -Wreal-q-constant-
Выводит предупреждение, если вещественная константа содержит
qпоказатель-букву. -Wsurprising-
Выдает предупреждение при обнаружении подозрительных конструкций кода. Хотя технически они законны, они обычно указывают на допущенную ошибку.
В настоящее время это предупреждение выдается в следующих случаях:
- В конструкции INTEGER SELECT есть CASE, который никогда не может быть сопоставлен, так как его нижнее значение больше его верхнего значения.
- В конструкции LOGICAL SELECT есть три CASE оператора.
- TRANSFER указывает источник, который короче назначения.
- Тип результата функции объявлен более одного раза с тем же типом. Если включён -pedantic или режим соответствия стандарту, это ошибка.
- Переменная типа
CHARACTERобъявлена с отрицательной длиной.
-Wtabs-
По умолчанию табуляции принимаются как пробелы, но табуляции не являются членами набора символов Fortran. Для продолжения строк поддерживается табуляция, за которой следует цифра от 1 до 9. -Wtabs вызовет предупреждение, если встретится табуляция. Примечание, -Wtabs активен для -pedantic, -std=f95, -std=f2003, -std=f2008, -std=f2008ts и -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этой опции не предупреждает об отсутствии использования параметров-аргументов (см. -Wunused-dummy-argument), а о неиспользованииPARAMETERзначений. -Wunused-parameter подразумевается -Wextra, если также используется -Wunused или -Wall. -Walign-commons-
По умолчанию
gfortranпредупреждает о каждом случае, когда переменные дополняются для правильного выравнивания внутри блокаCOMMON. Это предупреждение можно отключить с помощью -Wno-align-commons. См. также -falign-commons. -Wfunction-elimination-
Выдает предупреждение, если какие-либо вызовы функций исключаются оптимизациями, включенными с помощью опции -ffrontend-optimize.
-Wrealloc-lhs-
Выдает предупреждение, когда компилятор может вставить код для выделения или перевыделения переменной массива allocatable типа intrinsic в присваиваниях intrinsic. В горячих циклах функция перевыделения Fortran 2003 может снизить производительность. Если массив уже выделен с правильной формой, рассмотрите использование целого массива array-spec (например,
(:,:,:)) для переменной в левой части, чтобы предотвратить проверку перевыделения. Обратите внимание, что в некоторых случаях предупреждение отображается даже если компилятор оптимизирует проверки перевыделения. Например, когда правая часть содержит ту же переменную, умноженную на скаляр. См. также -frealloc-lhs. -Wrealloc-lhs-all-
Выдает предупреждение, когда компилятор вставляет код для выделения или перевыделения allocatable переменной; это включает скаляры и производные типы.
-Wcompare-reals-
Выдает предупреждение при сравнении вещественных или комплексных типов на равенство или неравенство. Эта опция подразумевается опцией -Wextra.
-Wtarget-lifetime-
Выдает предупреждение, если указатель в присваивании указателя может быть длиннее, чем его целевая переменная. Эта опция подразумевается опцией -Wall.
-Wzerotrip-
Предупредить, если цикл
DOизвестен как выполняющийся ноль раз во время компиляции. Этот параметр подразумевается параметром -Wall. -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-7.2.0/gfortran/Error-and-Warning-Options.html