Ответ 1
Оба GCC и Clang имеют опцию -fsyntax-only
, которая заставляет компилятор выполнять синтаксическую проверку без какой-либо реальной компиляции.
Без компиляции кода я бы хотел, чтобы GCC или Clang сообщали о предупреждениях.
Можно ли запустить компилятор только для статического анализа?
Я не могу найти способ передать флаги предупреждения компилятора и сказать, что он не компилируется.
edit: только что обнаружил, что clang имеет статический анализатор
Оба GCC и Clang имеют опцию -fsyntax-only
, которая заставляет компилятор выполнять синтаксическую проверку без какой-либо реальной компиляции.
В дополнение к другим ответам, gcc
делает некоторый анализ во время компиляции (и даже во время некоторых проходов оптимизации). Таким образом, вы можете отказаться от сгенерированного кода и получать все предупреждения, например. gcc -Wall -O -c code.c -o /dev/null
Обратите внимание, что вы можете расширить GCC с помощью дополнительных пропусков, выполняя некоторые дополнительные, специфичные для приложения, проверки и предупреждения, например. с MELT (язык высокого уровня для конкретного домена для расширения GCC).
Если вам нужен сильный статический анализ и вы готовы дать дополнительные аннотации для этой цели, рассмотрите также Frama C.