Поиск неиспользуемых объектов (не примитивных значений) - PullRequest
6 голосов
/ 19 января 2012

Ответьте на вопрос: g ++ не отображает «неиспользованное» предупреждение .

Я полностью понимаю, почему g ++ не предупреждает об этих переменных, но я бы хотел как-нибудьнайти их в любом случае.Код, над которым я работаю, не имеет ни одного из этих особых случаев, поэтому один FloatArray x; почти наверняка оставлен.

Даже если мне нужно пометить отдельные классы (например, предупреждение для неиспользованныхFloatArray-objects) было бы очень полезно.Что я могу сделать?

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

Ну, с GCC следующий код предупреждает, как вы хотите:

struct Foo
{
};
struct Bar
{
    Foo f;
};
int main()
{
    Bar b; //warning: unused variable 'b' 
}

Но если вы добавите конструктор / деструктор в структуру Foo или Bar, даже тривиальную, она не будет предупреждать.

struct Foo
{
    Foo() {}
};
struct Bar
{
    Foo f;
};
int main()
{
    Bar b; //no warning! It calls Foo::Foo() into b.f
}

Итак, самый простой способ восстановить предупреждение - это скомпилировать все соответствующие конструкторы и деструкторы условно:

struct Foo
{
#ifndef TEST_UNUSED
    Foo() {}
#endif
};
struct Bar
{
    Foo f;
};
int main()
{
    Bar b; //warning!
}

Теперь скомпилируйте с g++ -DTEST_UNUSED, чтобы проверить наличие дополнительных неиспользуемых переменных.

Не самая яркая идея, но она работает.

1 голос
/ 19 января 2012

Ну, в общем, вы хотите создать какой-то простой инструмент статического анализа, подключенный к GCC?Если это так, вы можете начать с использования MELT для быстрой реализации неиспользуемого принтера переменных.

http://gcc.gnu.org/wiki/MELT%20tutorial

0 голосов
/ 31 января 2012

Я не уверен, что что-то упустил в вопросе, но в gcc / g ++ есть опции, которые позволяют вам указать, какие предупреждения вы хотите, а какие - нет. Так что просто включите -Wunused-variable.

Подробнее см. Здесь: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

Кроме того, -Wall включит это и многие другие полезные предупреждения.

...