Мне интересен бесплатный инструмент, который может статически проверять мой код на С++, например, Lint. Любые подсказки?
C/С++ Свободная альтернатива Lint?
Ответ 1
Попробуйте cppcheck
, найти здесь: http://cppcheck.sourceforge.net/
Здесь выполняется выборка некоторых проверок, которые она может выполнить или которые я использовал для:
- Индексы массива за пределами границ
- Утечка памяти/ресурсов
- Неправильное новое/удаление
- Невозможность поместить виртуальные деструкторы на производные классы
- Несоответствие распределения и освобождения
- Передача освобожденного указателя
- Использование переменной после ее освобождения/освобождения
- Несоответствие размера
- Недопустимый радиус при вызове
strtol
илиstrtoul
- Перекрытие буферов данных
- Неподписанное разделение; результат может быть неправильным
- Необычная арифметика указателей
- Возвращаемый указатель на переменную локального массива
- Тот же итератор используется с двумя контейнерами
- Опасное использование стирания
- После pushback или pushfront, итератор может быть недействительным
- Переполнение буфера
- Опасное использование
strncat
, возможный переполнение буфера
Ответ 2
Возможно, такой список, который вы ищете:
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
Ответ 3
Еще один инструмент для списка: Google cpplint.py, руководство по стилю Google С++ упоминает. Это очень специфично для Google, но тем не менее.
Ответ 4
Лично я попробовал cppcheck (v1.4) и нашел его безнадежным.
например. Этот пример был правильно обнаружен для массива за пределами границ:
int a[4];
for (int n = 0; n < 5; n++)
{
a[n] = n;
}
Но этот пример не был обнаружен:
int a[4];
int z = 4 + 1;
for (int n = 0; n < z; n++)
{
a[n] = n;
}
Ответ 5
Ответ 6
Возможно, вы захотите проверить этот проект:
- Vera ++ на основе пользовательских правил (написанных в Tcl, Python или Lua)
И несколько не бесплатных:
- QAС++
- Coverity
- Klocwork
- Abraxas CodeCheck - слышал разные мнения...
Ответ 7
Недавно я прочитал о DeHydra и Pork, используемый Mozilla, хотя я сам не пробовал.
Ответ 8
Попробуйте nsiqcppstyle, средство проверки стиля С++, написанное на python.