Авторы анализатора PVS-Studio предлагают программистам проверить свою внимательность и попробовать найти ошибки в фрагментах Си/Си++ кода.
Анализаторы кода работают без устали и умеют находить множество ошибок, которые сложно заметить. Мы отобрали некоторые фрагменты кода, в которых мы выявили ошибки с помощью PVS-Studio.
Тест не предназначен для тестирования глубины знания языка Си++. Для этого есть другие хорошие и интересные тесты. Например, можно рекомендовать этот C++ Quiz. Наш же тест сделан for fun.
Мы часто слышим от людей, что анализатор кода — это бессмысленный инструмент. Не там поставленную скобку или запятую можно найти за 5 секунд. А сложные алгоритмические ошибки анализатор не найдёт. Поэтому, максимум кому полезен инструмент, это студенты.
Мы решили потроллить таких людей. В тестах сделано ограничение по времени. Предлагаем им найти ошибку за тем самые 5 секунд. Хорошо, не 5 секунд, а за минуту. Будет предложено 15 случайно выбранных заданий. За верный ответ насчитывается одно очко, если он дан в течение 1 минуты.
Хотим подчеркнуть, речь идёт не о синтаксических ошибках. Все фрагменты взяты из известных Open-Source проектов, которые успешно компилируются. Рассмотрим пару примеров с ошибками и объясним, как указывать правильный ответ.
Пример первый.
Здесь ошибка выделена красным. При решении задач этого, конечно, не будет.
Программист случайно опечатался и вместо индекса 2 написал 3. При движении курсора мышки над кодом будут подсвечиваться различные слова и цифры. Вы должны навести курсор на число 3 и нажать левую кнопку мыши.
Это будет правильный ответ.
Не всегда можно однозначно указать, где ошибка:
Второй пример.
Размер буфера нужно сравнить с числом 48. Случайно в код затесался лишний оператор sizeof(). В результате, размер буфера сравнивается с размером типа int.
На мой взгляд, ошибкой является оператор «sizeof», и именно на него надо указать мышкой. Однако, не имея перед глазами весь текст программы, можно рассудить так. Оператор 'sizeof' должен был посчитать размер какого-то буфера, но ему случайно подсунули макрос. Ошибкой является использование «SSL3_MASTER_SECRET_LENGTH».
Для таких случаев ответ будет засчитан, как верный, независимо от того, выберете вы «sizeof» или «SSL3_MASTER_SECRET_LENGTH».
Желаем успехов! Вы можете начать игру.
Примечание.
Тест не рассчитан на мобильные устройства. Тыкая пальцем очень легко промахнуться. Мы готовим новую версию тестов, где лучше поддержим мобильные устройства, сделаем новый задания и так далее. Но пока этого нет. Предлагаем подписаться на твиттер, чтобы быть в курсе что у нас нового, интересного, и что вообще происходит в мире Си++.
Подробности
Перемещено anonymous_incognito из opensource