Разные компиляторы ловят разные условия; большинство компиляторов имеют опции уровня предупреждения, в частности, GCC имеет много, но -Wall -Werror включит большинство полезных и приведет их к ошибкам. Используйте \ W4 \ WX для аналогичной защиты в VC ++.
В GCC Вы можете использовать -ansi -pedantic, но педантичный - это то, что он говорит, и он вызовет много не относящихся к делу проблем и затруднит использование большого количества стороннего кода.
В любом случае, поскольку компиляторы отлавливают разные ошибки или выдают разные сообщения для одной и той же ошибки, поэтому полезно использовать несколько компиляторов, не обязательно для развертывания, но в качестве статического анализа для плохого человека. Другой подход к коду C - попытаться скомпилировать его как C ++; более строгая проверка типов в C ++ обычно приводит к лучшему коду на C; но будьте уверены, что если вы хотите, чтобы компиляция C работала, не используйте исключительно компиляцию C ++; Вы, вероятно, представите специфические особенности C ++. Опять же, это не нужно развертывать как C ++, а просто использовать как дополнительную проверку.
Наконец, компиляторы обычно строятся с балансом производительности и проверкой ошибок; для исчерпывающей проверки потребуется время, которое многие разработчики не примут. По этой причине существуют статические анализаторы, для C существует традиционная линейка и шина с открытым исходным кодом. C ++ более сложен для статического анализа, а инструменты часто очень дороги. Одним из лучших, которые я использовал, является QAC ++ от Programming Research. Я не знаю ни одного бесплатного или открытого анализатора C ++ с какой-либо репутацией.