TGViewer
Just code IT Just code IT @justcodeit_channel · 1.32K subscribers
Post #95 4.39K
Баллада об неинициализированных переменных

Использование неинициализированных переменных — очевидно грустная тема. С одной стороны, это угроза безопасности (можно подстроить стек или кучу таким образом, чтобы без инициализации использовались вредоносные значения). С другой стороны, это угроза надежности/стабильности работы — в неинициализированных данных может оказаться все что угодно и это «что угодно» будет меняться от запуска к запуску, от платформы к платформе. Про запрет на использование неинициативных переменных говорят стандарты (ISO26262-6-6.1c, SEI CERT), компиляторы помогают нам найти подобные опасные места (gcc -Wuninitialized -Wgnu-empty-initializer). Статические анализаторы тоже поддерживают эстафету (раз и два).

Но почему ж такое до сих пор встречается в коде? Да потому что вопрос «а как надо?» до сих пор не решен. Ясно, что разнесение декларации от инициализации создает пространство для внесения ошибки. Можно оставить переменную в начале блока, но там не всегда известны правильные значения инициализации (а забивание переменной «мусором» скроет от компилятора потенциальное нарушение бизнес логики).

Можно объявить по месту, но тут мы встаем на скользкую тропку in-place initialisation and against holy war, а это уже война Сишников против Плюсовиков, для которых RAII является естественным. Можно дробить на микро-блоки/микро-функции, так чтобы объявление шло рука об руку с инициализацией и было осмысленным, но тут уже вкусовщина и снижение читаемости через излишне высокую гранулярность функций.

Так что же в итоге? А нет однозначного ответа! Не используйте неинициализированные переменные и пишите красивый код, как бы эта красота не была хрупка…

#digest
PVS-Studio V614. Use of ′Foo′ uninitialized variable. V614. The analyzer has detected use of an uninitialized variable. Using uninitialized variables has unpredictable results. What is dangerous about such defects is that they may hide for years until chance...
  • 👍 9
  • ❤ 2
  • 💩 1
More from @justcodeit_channel
  1. Aug 1, 20243D ландшафт в 256 байт Существуют разные виды intro — небольших динамических сцен, генерир…
  2. Jul 17, 2024Практическое погружение в метакомпиляторы Практически у каждого из наших читателей с образ…
  3. Jul 3, 2024Как создаются 64 intro Уверены, многие наши читатели слышали про демосцену — вид цифрового…
  4. Jun 14, 2024Создание программы 3D моделирования за неделю Недавно обнаружили на просторах сети занимат…
  5. May 28, 2024VPN, созданный по принципам Secure-by-design Много кто пишет про подход SbD (Secure-by-des…
  6. Apr 24, 2024Наследие Никлауса Вирта Как известно, 1 января 2024 года не стало Никлауса Вирта (Niklaus…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →