Spec-Zone.ru › GNU Fortran 4

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, -Wno-tabs, -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.
-Wconversion
Предупреждает о неявных преобразованиях, которые, вероятно, изменят значение выражения после преобразования. Подразумевается -Wall.
-Wconversion-extra
Предупреждает о неявных преобразованиях между различными типами и видами.
-Wextra
Включает некоторые опции предупреждений для использования функций языка, которые могут представлять собой проблемы. В настоящее время это включает -Wcompare-reals и -Wunused-parameter.
-Wimplicit-interface
Предупреждает, если процедура вызывается без явного интерфейса. Обратите внимание, что это проверяет только наличие явного интерфейса. Это не проверяет, что объявленные интерфейсы согласованы между программными блоками.
-Wimplicit-procedure
Предупреждает, если процедура вызывается, не имея явного интерфейса или не будучи объявлена как EXTERNAL.
-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. -Wno-tabs заставит выдать предупреждение при обнаружении табуляции. Обратите внимание, что -Wno-tabs активен для -pedantic, -std=f95, -std=f2003, -std=f2008 и -Wall.
-Wunderflow
Выдает предупреждение при обнаружении числовых константных выражений, которые приводят к подтеку при компиляции.
-Wintrinsic-shadow
Предупреждает, если пользовательская процедура или процедура модуля имеет то же имя, что и встроенная процедура; в этом случае может потребоваться явный интерфейс или объявление EXTERNAL или INTRINSIC, чтобы вызовы позже были разрешены на желаемую встроенную процедуру/процедуру. Эта опция подразумевается -Wall.
-Wunused-dummy-argument
Предупреждает об аргументах-фикциях, которые не используются. Эта опция подразумевается -Wall.
-Wunused-parameter
В отличие от gcc в смысле -Wunused-parameter, реализация gfortran этой опции не предупреждает об аргументах-фикциях, которые не используются (см. -Wunused-dummy-argument), но о неиспользуемых значениях PARAMETER. -Wunused-parameter не включено в -Wall, но подразумевается -Wall -Wextra.
-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-4.9.3/gfortran/Error-and-Warning-Options.html

Spec-Zone.ru

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