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

Вебинар: Подводные камни регулярных выражений: катастрофический возврат, ReDoS-атаки и выявление уязвимостей - 30.04

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

V6012. The '?:' operator, regardless of its conditional expression, always returns one and the same value.

04 Май 2018

Анализатор обнаружил потенциальную ошибку при использовании тернарного оператора ?:. Независимо от условия, будет выполнено одно и тоже действие. Скорее всего, в коде имеется опечатка.

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

int a = b ? c : c;

В любом случае переменной a будет присвоено значение переменной c.

Рассмотрим пример, где уже не так легко заметить подобную ошибку:

double calc(Box bx, int angle, double scale) {
  return Math.tan((angle % 2 == 0 ?
         bx.side_x : bx.side_x) * 0.42) * scale;
}

Здесь код отформатирован. В тексте программы это может быть одной строкой, и неудивительно, что легко просмотреть опечатку. Ошибка в том, что два раза используется поле side_x. Корректный вариант:

double calc(Box bx, int angle, double scale) {
  return Math.tan((angle % 2 == 0 ?
         bx.side_x : bx.side_y) * 0.42) * scale;
}

Данная диагностика классифицируется как:

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6012.