Давно пользуюсь услугами cppcheck, но решил поглядеть что есть ещё (как оказалось, лучше, по сути, ничего и нету). Наткнулся на статью по теме на хабре: http://habrahabr.ru/post/75123
Тезисно:
- Педантичные ключи для gcc (сам автор отсылает за подробностями:
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html), особо хочется отметить неизвестный мне ключ
-Weffc++
, включает проверку на соответствие рекомендациям Скотта Майерса. Результат сборки моего последнего проекта поверг в уныние: будет ещё работы по вычистке. - cppcheck (в арчике есть в стандартных репах)
- vera++ (есть в AUR)
- rats (есть в AUR)
- проверялки для чистого Си (как оказалось(( http://www.cert.org/secure-coding/tools.html и http://www.cs.cmu.edu/~aldrich/courses/654/tools/index.html)) их значительно больше, нежели для C++)
Далее, Анализ утилит статического анализа C++ кода, автор рассматривает следующие анализаторы:
- rats (выше писал)
- cppcheck (аналогично)
- Graudit (есть в AUR)
причём рассматривает проблемы, которые они не выявляют.
Список статических анализаторов можно поглядеть на страничке в википедии: http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis, причём не только для C/C++
Для интереса можно почитать перевод статьи Джона Кармака о статическом анализе: http://habrahabr.ru/post/135234/((Оригинал статьи: altdevblogaday.com/2011/12/24/static-code-analysis/)), где кратко излагается, какими инструментами ему довелось воспользоваться, и какие впечатления остались после них.
И на последок серия из четырёх заметок камрада Andrey2008((Один из разработчиков PVS-Studio, поэтому малость пропускаем его отсылы к этому продукту)) “Как уменьшить вероятность ошибки на этапе написания кода”:
-
Заметка №1:
- Избегайте функции memset, memcpy, ZeroMemory и им аналогичные
- Внимательно следите, работаете вы со знаковым или беззнаковым типом
- Избегайте большого количества вычислений в одной строке
- Выравнивайте в коде всё, что возможно
- Не размножайте строку более, чем один раз
- Выставляйте высокий уровень предупреждений у компилятора и используйте статические анализаторы
-
Заметка №2
- Не используйте тернарную операцию ‘?:’ в составных выражениях
- Не стесняйтесь использовать скобки
-
Заметка №3 - на примерах ошибок в Qt4
- Обрабатывайте переменные в той же последовательности, как они объявлены
- Табличные методы — это хорошо
- Разное интересное (про разные и интересные ошибки в Qt4)
- Заметка №4 - на примерах ошибок в Firefox