﻿# Игра: найди ошибку в C\+\+ коде

Авторы анализатора PVS\-Studio предлагают вам проверить свою внимательность и развлечься\. Попробуйте быстро отыскать баг в фрагменте исходного кода и ткнуть в него мышкой\.

![0960_Game_Cpp_ru/image1.png](https://import.viva64.com/docx/blog/0960_Game_Cpp_ru/image1.png)

Анализаторы кода работают без устали и умеют находить множество ошибок, которые сложно заметить\. Мы отобрали несколько фрагментов кода, в которых выявили ошибки с помощью PVS\-Studio\. Все фрагменты [взяты](https://pvs-studio.ru/ru/blog/inspections/) из известных Open Source проектов\.

Предлагаем вам посоревноваться с анализатором в прозорливости и попробовать самостоятельно найти ошибки\. Вам будет предложено 10 случайно выбранных заданий\. За верный ответ начисляется одно очко, если баг найден в течение 1 минуты\.

Ограничение в 1 минуту сделано для интереса\. Иначе вы, скорее всего, верно найдёте и укажете каждую ошибку, так как фрагменты кода короткие\. В любом случае относитесь к этому просто как к игре, а не как к настоящему тестированию программистских навыков у вас или ваших коллег :\)

Когда нашли ошибку, выделите её кликом мышки и нажмите кнопку "Ответ"\. Бывает, что в коде есть сразу несколько мест, куда вы можете "ткнуть" — и ответ зачтётся как правильный\. Поясним это на примере\.

```cpp
case FuriHalSubGhzPreset2FSKDev476Async:
  preset_name = "FuriHalSubGhzPreset2FSKDev476Async";
  break;
  FURI_LOG_E(SUBGHZ_PARSER_TAG, "Unknown preset");
default:
```

Этот код взят из проекта FlipperZero\. Анализатор PVS\-Studio сообщает, что часть кода никогда не выполняется: V779 \[CWE\-561, CERT\-MSC12\-C\] Unreachable code detected\. It is possible that an error is present\. subghz\_i\.c 44

Кто\-то поспешил и использовал макрос логирования после оператора _break_\. Или это следствие неудачного рефакторинга\. В любом случае ошибка очевидна, но вот куда именно ткнуть мышкой – вопрос сложнее\.

С одной стороны, в качестве ответа можно выбрать оператор _break_\. Он расположен до макроса _FURI\_LOG\_E_ и прерывает выполнение оператора _switch_\. Значит, проблема здесь\.

С другой стороны, можно выбрать макрос логирования\. Ведь это недостижимый код\.

Так как же быть? Очень просто\. В данном случае правильным ответом будет считаться как выделенный оператор _break_, так и макрос _FURI\_LOG\_E_\.

Думаем, правила понятны\. Желаем вам удачи: [начать игру](https://quiz.pvs-studio.com/ru/cpp/)\.

Не забудьте, показать этот Quiz вашим коллегам\! Развлекайтесь, и безбажного вам кода\!