Раздел 6.7.8 Инициализация стандарта C99 (n1256) отвечает на этот вопрос:
Если объект, который имеет автоматическую продолжительность хранения не инициализирована явно, его значение является неопределенным. Если объект, который имеет статическую продолжительность хранения, не инициализируется явно, то:
- если у него есть тип указателя, он инициализируется нулевым указателем;
- если у него арифметический тип, он инициализируется (положительным или без знака) нулем;
- если это совокупность, каждый член инициализируется (рекурсивно) в соответствии с этими правилами;
- если это объединение, первый именованный элемент инициализируется (рекурсивно) в соответствии с этими правилами.
Я предполагаю, что спрашивающий хочет знать, почему 'статический Int х;' 'всегда делают x' инициализируется нулем, а' ИНТ х; '' x' оставляет сборщиком. – kennytm
Хм, возможно, вы правы, я пересмотрел ответ, чтобы ответить на этот вопрос. – DigitalRoss
На самом деле, настоящая причина в том, что первоначальный стандарт C заключался в том, чтобы кодифицировать существующую практику, а не вводить новые вещи. И pre-ANSI/ISO C сделал это для повышения эффективности. – paxdiablo