Hatred's Log Place

DON'T PANIC!

Jun 8, 2012 - 2 minute read - Comments - programming c++

На правах заметки: Статический анализ кода C++

Давно пользуюсь услугами 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: 1. Избегайте функции memset, memcpy, ZeroMemory и им аналогичные 2. Внимательно следите, работаете вы со знаковым или беззнаковым типом 3. Избегайте большого количества вычислений в одной строке 4. Выравнивайте в коде всё, что возможно 5. Не размножайте строку более, чем один раз 6. Выставляйте высокий уровень предупреждений у компилятора и используйте статические анализаторы * Заметка №2 1. Не используйте тернарную операцию ‘?:’ в составных выражениях 2. Не стесняйтесь использовать скобки * Заметка №3 - на примерах ошибок в Qt4 1. Обрабатывайте переменные в той же последовательности, как они объявлены 2. Табличные методы — это хорошо 3. Разное интересное (про разные и интересные ошибки в Qt4) * Заметка №4 - на примерах ошибок в Firefox