Этот проект включает в себя инструменты и списки, чтобы выяснить все предупреждающие флаги, которые Clang Compiler и Compiler Collection имеют для семейных языков C (C, C ++ и Objective-C). Это также показывает все псевдонимы и предупреждающие флаги, которые позволяет определенный флаг (с префиксом «#» символом), чтобы вы могли легко увидеть, какой флаг включен на что. Существуют также предупреждающие флаги, которые ничего не делают по соображениям совместимости или соображений по терапии. Они суффиксу с текстом "# Dumy Switch".
Цель этих коллекций состоит в том, чтобы сделать более простым в использовании инструментов анализа статического кода, которые предоставляют компиляторы.
Clang включает в себя -Weverything
Flag, который не показан в этих списках, который позволяет все предупреждения. Документация Clang предоставляет ссылку на некоторые диагностические флаги в Clang.
Если вам нужен полный список вариантов предупреждения GCC, для конкретной версии GCC вы можете запустить GCC с помощью gcc --help=warnings
для получения этого списка. В противном случае некоторые простые списки вариантов предупреждения GCC доступны ниже:
Одним из вариантов использования для этих видов списков является увидеть, какие различия существуют между различными компиляторами и версиями компилятора. Я сделал доступные различия в рудиментарном компиляторе между двумя последующими версиями компилятора в качестве дифференциальных штук, но для более конкретных различий вам необходимо использовать некоторую (визуальную) программу DIFF, как показано ниже:
Это использует ANTLR в качестве генератора анализатора с некоторым поддерживающим кодом Python для анализа предупреждающих флагов из фактических файлов данных опции компилятора. Другие требования следующие (плюс их зависимости):
После того, как вы установили все требования и сможете запустить ANTLR с командой antlr4
, просто используйте следующие команды в parsers/
каталоге, чтобы создать эти списки самостоятельно:
ninja
./parse-clang-diagnostic-groups.py <path-to-clang-source>/include/clang/Basic/DiagnosticGroups.td
./parse-gcc-warning-options.py <path-to-gcc-source>/gcc/{common.opt,c-family/c.opt}
И вы получите список всех отдельных предупреждающих флагов и их зависимости, которые находятся в запрошенной версии компилятора.
Чтобы сгенерировать фильтрованные списки, вы можете использовать переключатели --top-level
и --unique
.
--top-level
не включает предупреждения, которые включены каким-то другим коммутатором в списке.--unique
перечисляет все предупреждения без какой-либо информации, какие другие предупреждения они дают. Различия на этой странице создаются из этих файлов. Есть некоторые модульные тесты, проверяющие функциональность низкого уровня. Вы можете выполнить время с командой ninja test
в parsers/
каталоге, чтобы проверить, что модульные тесты проходят.
Когда анализатор получает изменение, которое влияет на форматирование или другие выводы для нескольких файлов, эти списки предупреждения должны быть воссозданы. Существуют сценарии process-clang-git.sh
и process-gcc-git.sh
, которые принимают корень репозитория GIT в качестве своего первого параметра и применяют все различные варианты этих команд для создания окончательных текстовых файлов.