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

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

Опыты через промежуточное представление на C показали, что при совмещении простого статического анализа, посильное и компилятору, с динамическим на проверку неинициализированности дополнительно уходит ~ 10 % при не оптимизирующей сборке и ~ 25% при сильно оптимизирующей. Оптимизированная версия с проверками в ~3 раза быстрей неоптимизированной без проверок.

Пример, как это может быть сделано длястатическойидинамическойпроверок