C был разработан, чтобы быть языком относительно низкого уровня, чтобы его можно было использовать для написания, ну, в общем, низкоуровневых вещей, таких как операционные системы. (на самом деле, он был спроектирован так, чтобы UNIX мог быть написан на C). Вы можете просто думать о нем как о коде ассемблера с читаемым синтаксисом и конструкциями более высокого уровня. По этой причине C (минус оптимизация) делает именно то, что вы просите, ни больше, ни меньше.
Когда вы пишете int x;
, компилятор просто выделяет память для целого числа. Вы никогда не просили его что-либо там хранить, поэтому все, что было в этом месте, когда ваша программа запускалась, остается неизменным. Чаще всего оказывается, что ранее существующее значение является «мусором».
Иногда внешняя программа (например, драйвер устройства) может записывать в некоторые из ваших переменных, поэтому нет необходимости добавлять другую инструкцию для инициализации таких переменных.