Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Практическая интеграция PVS-Studio и SourceCraft - 15.07

menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V8001. Identical sub-expressions to the left and to the right of the 'foo' operator.

03 Апр 2026

Анализатор обнаружил фрагмент кода, который может содержать логическую ошибку. В тексте программы присутствует бинарное выражение, в котором левое и правое подвыражение одинаковы. В качестве оператора такого выражения могут быть: <, >, <=, >=, ==, !=, &&, ||, -, /, &, | или ^.

Рассмотрим пример:

func ConvertRGB(rgb RGBContainer) {
  if rgb.R > 1 && rgb.G > 1 && rgb.R > 1 {
    ....
  }
  ....
}

В данном случае в условии есть два подвыражения rgb.R > 1, объединённые с помощью оператора &&. Допущена ошибка по невнимательности, поскольку нет смысла использовать одно и то же подвыражение несколько раз через логический оператор &&.

Корректный код, который не вызовет подозрений у анализатора, будет выглядеть так:

func ConvertRGB(rgb RGBContainer) {
  if rgb.R > 1 && rgb.G > 1 && rgb.B > 1 {
    ....
  }
  ....
}

Анализатор производит сравнение блоков с учётом перестановки частей выражения относительно операторов. Ошибка будет обнаружена и в следующем примере кода:

if len([]rune(name)) > maxlength && 
   maxlength < len([]rune(name)) {
  ....
}