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