2.4 Параметры для запроса или подавления ошибок и предупреждений
Ошибки — это диагностические сообщения, указывающие, что компилятор GNU Fortran не может скомпилировать соответствующий фрагмент исходного кода. Компилятор продолжит обработку программы, пытаясь сообщить о дополнительных ошибках для помощи в отладке, но не создаст никакого скомпилированного вывода.
Предупреждения — это диагностические сообщения, сообщающие о конструкциях, которые не являются врожденно ошибочными, но которые рискованны или предполагают, что в программе, вероятно, есть ошибка. Они не препятствуют компиляции программы, если не указано -Werror.
Вы можете запросить многие специфические предупреждения с параметрами, начинающимися с -W, например, -Wimplicit, чтобы запросить предупреждения об имплицитных объявлениях. Каждый из этих специфических параметров предупреждения также имеет отрицательную форму, начинающуюся с -Wno-, чтобы отключить предупреждения; например, -Wno-implicit. В данном руководстве указана только одна из двух форм, которая не является по умолчанию.
Эти параметры контролируют количество и типы ошибок и предупреждений, генерируемых GNU Fortran:
-
-fmax-errors=n - Ограничивает максимальное количество сообщений об ошибках до n, после чего GNU Fortran прерывает обработку, вместо попытки продолжить обработку исходного кода. Если n равно 0, ограничений на количество сообщений об ошибках нет.
-fsyntax-only- Проверяет код на синтаксические ошибки, но фактически не компилирует его. Это сгенерирует файлы модулей для каждого модуля, присутствующего в коде, но не создаст других выходных файлов.
-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,-Wreal-q-constantи-Wunused. -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 предполагает продолжение на первом символе, отличном от комментария и пробела, после амперсанда, который инициировал продолжение. -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. -Wimplicit-interface- Предупреждает, если процедура вызывается без явного интерфейса. Обратите внимание, что это проверяет только наличие явного интерфейса. Оно не проверяет, что объявленные интерфейсы согласованы между блоками программы.
-Wimplicit-procedure-
Предупреждает, если процедура вызывается без явного интерфейса и не объявлена как
EXTERNAL. -Wintrinsics-std-
Предупреждает, если
gfortranобнаруживает процедуру с именем, похожим на встроенную функцию, недоступную в текущем выбранном стандарте (с-std) и обрабатывает её какEXTERNALпроцедуру из-за этого.-fall-intrinsicsможет быть использован, чтобы никогда не вызывать этого поведения и всегда связываться со встроенной функцией независимо от выбранного стандарта. -Wreal-q-constant- Выдает предупреждение, если действительное число содержит экспоненциальный символ.
-Wsurprising-
Выдает предупреждение при обнаружении подозрительных конструкций кода. Хотя они технически законны, они обычно указывают на допущенную ошибку.
В настоящее время это предупреждение выдается в следующих случаях:
- В конструкции SELECT для целочисленного типа имеет CASE, который никогда не может быть сопоставлен, так как его нижнее значение больше его верхнего значения.
- В конструкции SELECT для логического типа есть три CASE оператора.
- TRANSFER указывает источник, который короче назначения.
- Тип результата функции объявлен более одного раза с тем же типом. Если
-pedanticили режим совместимости со стандартом включен, это ошибка. - Переменная
CHARACTERобъявлена с отрицательной длиной.
-Wtabs-
По умолчанию табуляция воспринимается как пробел, но табуляция не является частью набора символов Fortran. Для продолжения строк поддерживается табуляция, за которой следует цифра от 1 до 9.
-Wtabsприведет к выводу предупреждения, если встретится табуляция. Обратите внимание, что-Wtabsактивен для-pedantic,-std=f95,-std=f2003,-std=f2008,-std=f2008tsи-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-
Предупреждает, когда компилятор может вставить код для выделения или перераспределения переменной массива с параметром ALLOCATABLE базового типа в операциях присваивания. В циклах с высокой производительностью функция перераспределения Fortran 2003 может снизить производительность. Если массив уже выделен с правильной формой, рассмотрите использование спецификации всего массива (например,
(:,:,:)) для переменной слева, чтобы предотвратить проверку перераспределения. Обратите внимание, что в некоторых случаях предупреждение отображается даже если компилятор оптимизирует проверку перераспределения. Например, когда правая часть содержит ту же переменную, умноженную на скаляр. См. также-frealloc-lhs. -Wrealloc-lhs-all- Предупреждает, когда компилятор вставляет код для выделения или перераспределения переменной с параметром ALLOCATABLE; это включает скаляры и производные типы.
-Wcompare-reals-
Предупреждает при сравнении вещественных или комплексных типов на равенство или неравенство. Этот параметр подразумевается параметром
-Wextra. -Wtarget-lifetime-
Предупреждает, если указатель в присваивании указателей может быть длиннее, чем его целевой объект. Этот параметр подразумевается параметром
-Wall. -Wzerotrip-
Предупреждает, если цикл
DOизвестен как выполняющий нулевое количество раз во время компиляции. Этот параметр подразумевается параметром-Wall. -Werror- Преобразует все предупреждения в ошибки.
См. Параметры для запроса или подавления ошибок и предупреждений, для получения информации о дополнительных параметрах, предлагаемых GBE, используемым gfortran, gcc и другими компиляторами GNU.
Некоторые из них не действуют при компиляции программ, написанных на Fortran.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gfortran/Error-and-Warning-Options.html