Как запустить GCC/Clang для статического анализа? (только предупреждения)

Без компиляции кода я бы хотел, чтобы GCC или Clang сообщали о предупреждениях.
Можно ли запустить компилятор только для статического анализа?
Я не могу найти способ передать флаги предупреждения компилятора и сказать, что он не компилируется.

edit: только что обнаружил, что clang имеет статический анализатор

Ответ 1

Оба GCC и Clang имеют опцию -fsyntax-only, которая заставляет компилятор выполнять синтаксическую проверку без какой-либо реальной компиляции.

Ответ 2

В дополнение к другим ответам, gcc делает некоторый анализ во время компиляции (и даже во время некоторых проходов оптимизации). Таким образом, вы можете отказаться от сгенерированного кода и получать все предупреждения, например. gcc -Wall -O -c code.c -o /dev/null

Обратите внимание, что вы можете расширить GCC с помощью дополнительных пропусков, выполняя некоторые дополнительные, специфичные для приложения, проверки и предупреждения, например. с MELT (язык высокого уровня для конкретного домена для расширения GCC).

Если вам нужен сильный статический анализ и вы готовы дать дополнительные аннотации для этой цели, рассмотрите также Frama C.