V607. Ownerless expression 'Foo'.
Анализатор обнаружил в коде потенциально бессмысленное выражение. Обычно такие конструкции возникают, когда результаты работы переменных, вызовов методов, операторов и т. д. нигде не используются. Такие ситуации могут быть следствием неаккуратного рефакторинга кода.
Рассмотрим пример:
void Run(int &a, int b, int c, bool X)
{
if (X)
a = b + c;
else
b - c;
}
Из-за опечатки текст программы не закончен. Код компилируется, но не имеет практического смысла.
Исправленный вариант:
void Run(int &a, int b, int c, bool X)
{
if (X)
a = b + c;
else
a = b - c;
}
Рассмотрим другой пример:
typedef struct data_format {
int day;
int month;
};
В данном фрагменте ключевое слово typedef использовано некорректно, поскольку для объявляемого типа не задано имя псевдонима, из-за чего оно не выполняет своей основной функции и является избыточным.
Правильный вариант:
typedef struct data_format {
int day;
int month;
} data_format_t; //< = Добавили название для typedef
Существуют исключения, когда анализатор не станет срабатывать на избыточные конструкции, например, при намеренном подавлении предупреждения компилятора о неиспользуемых переменных:
void Foo(int a, int b)
{
a, b;
}
Здесь анализатор не выдаст предупреждение V607.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V607. |