Анализатор обнаружил подозрительное выражение, в котором операнды могут быть сокращены. Это может свидетельствовать о наличии в коде логической ошибки или опечатки.
Рассмотрим простой синтетический пример:
void Foo(int A, int B, int C) { if (A - A + 1 < C) Go(A, B); }
Из-за опечатки получилось избыточное выражение, которое можно сократить до '1 < C'. На самом деле, планировалось написать, например, так:
void Foo(int A, int B, int C) { if (A - B + 1 < C) Go(A, B); }
В других случаях могут быть выявлены выражения, которые, хотя и не содержат ошибку, будет полезно упростить. Это может сделать выражения более простыми и понятными. Пример:
if ((rec.winDim.left + (rec.winDim.right - rec.winDim.left)) < inset) // <= { rec.winDim.left = -((rec.winDim.right – rec.winDim.left) - inset); rec.winDim.right = inset; } if ((rec.winDim.top + (rec.winDim.bottom – rec.winDim.top)) < inset) // <= { rec.winDim.top = -((rec.winDim.bottom – rec.winDim.top) - inset); rec.winDim.bottom = inset; }
В обоих условиях выражения могут быть упрощены путем устранения операндов 'rec.winDim.left' и 'rec.winDim.top' соответственно. Сокращённый вариант кода:
if (rec.winDim.right < inset) { rec.winDim.left = -((rec.winDim.right – rec.winDim.left) - inset); rec.winDim.right = inset; } if (rec.winDim.bottom < inset) { rec.winDim.top = -((rec.winDim.bottom – rec.winDim.top) - inset); rec.winDim.bottom = inset; }
Примечание. Иногда избыточность вовсе не уменьшает, а увеличивает читабельность кода. Например, избыточность может нести поясняющий смысл в математических формулах. В этом случае есть смысл не сокращать выражение, а использовать один из механизмов подавления ложных срабатываний.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V1065. |