Почему инструмент cppcheck не находит неинициализированную переменную?

Я запускаю запятую (Ubuntu 12.04)

cppcheck test.cpp

Я ожидаю предупреждения неинициализированной переменной от инструмента cppcheck.
Почему инструмент cppcheck не печатает его в командной строке?

Пример кода cpp:

#include <iostream>

class Foo
{
private:
int m_nValue;

public:
Foo();
int GetValue() { return m_nValue; }
};

Foo::Foo()
{
// Oops, we forget to initialize m_nValue
}

int main()
{
Foo cFoo;
if (cFoo.GetValue() > 0)
{//...
}
else
{//...
}
}

3

Решение

Потому что это сложно, и cppcheck не Всемогущий Бог, Создатель Вселенной, И Знающий Все?

Некоторые проблемы на самом деле невозможно обнаружить в общем случае; Я не уверен, является ли это одним из них. Но если cppcheck только одна единица перевода за раз, ну, что если Foo::Foo были определены в каком-то другом переводе?

4

Другие решения

Для информации … если вы используете —enable = warning, cppcheck пишет следующее сообщение:

[test.cpp: 13]: (предупреждение) Переменная-член ‘Foo :: m_nValue’ не инициализируется в конструкторе.

7

Статический анализ (это то, что делает cppcheck) не является точной наукой и не может быть. Теорема Райса гласит: «любое нетривиальное свойство поведения программы неразрешимо» (см. Тома Стюарта «Понимание вычислений: от простых машин до невозможных программ»).

Кроме того, проверить Что такое статический анализ Мэтт Мэйт. В обоих случаях вы должны понять, что статический анализ не только сложен и неразрешим.

Таким образом, существует множество причин, по которым ccpcheck не может сообщить о потенциальном использовании неинициализированной переменной.

Вы могли бы получить лучшие результаты, в этом случае, используя valgrind с memcheck инструмента, который будет сообщать об использовании потенциально неинициализированных переменных, но будучи динамическим инструментом (по сравнению со статическим инструментом). может дать лучшие (или, по крайней мере, разные) результаты.

Надеюсь, это поможет,
Т.

3
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector