🚀 Рассказываем про новые диагностики

С++ разработчики, у нас отличные новости — в релизе 7.34 появилась новое диагностическое правило V1116.

Оно предназначено для обнаружения ситуаций, когда исключения создаются без поясняющих сообщений. Рассмотрим пример: `void DoSomething(const char *val) { if (!val) throw std::runtime_error { "" }; }

void Function() { const char *val = ....; try { DoSomething(val); } catch (std::runtime_error &err) { std::cerr << err.what() << std::endl; } }

В функции DoSomething в случае возникновения ошибки бросается исключение с пустым сообщением, которое затем попадёт в std::cerr. Написав такой код, разработчик словно оставил коллегам послание: "Счастливой отладки". Это усложнит для них понимание того, что именно вызвало сбой.

Ситуацию можно исправить следующим образом: `if (!val) { throw std::runtime_error { "[DoSomething]: " "the 'val' pointer was nullptr." }; } Теперь вы получите сообщение, которое объясняет, что именно пошло не так.

Это правило работает для стандартного исключения. Для выдачи предупреждений на пользовательские исключения вы можете воспользоваться механизмом пользовательских аннотаций.

#cpp #PVS_Studio``

🚀 Рассказываем про новые диагностики
С разработчики, у нас отличные новости — в релизе 7.34 появилась новое диагностическое правило V1116 | Сетка — социальная сеть от hh.ru