Ответ 1
По умолчанию внешние и статические переменные инициализируются нулем, это гарантировано. Автоматические и регистровые переменные, у которых нет явного инициализатора, будут иметь неопределенное значение (либо неопределенное значение, либо ловушечное представление).
Из стандарта:
C89
6.5.7
Если объект, который имеет статическую продолжительность хранения, не инициализируется явно, он инициализируется неявно, как если бы каждый член, который имеет арифметический тип присваивался 0, и каждый член, имеющий тип указателя были назначены константа нулевого указателя. Если объект, который имеет время автоматического хранения не инициализируется явно, его значение равно неопределенными.
C99
6.2.4, §5:
Для такого объекта, который не имеет тип массива переменной длины, его время жизни продолжается от входа в блок, с которым он связан, до тех пор, пока выполнение этого блока не закончится в любом случае. (Ввод закрытого блока или вызов функции приостанавливается, но не заканчивается, выполнение текущего блока.) Если блок введен рекурсивно, новый экземпляр объект создается каждый раз. Начальное значение объекта является неопределенным. Если инициализация указана для объекта, она выполняется каждый раз, когда декларация достигнутый при выполнении блока; в противном случае значение становится неопределенным каждый время достижения декларации.
6.7.8, §10:
Если объект с автоматической продолжительностью хранения не инициализируется явно, его значение неопределенно. Если объект, который имеет статическую продолжительность хранения, не инициализируется явно, то:
- если он имеет тип указателя, он инициализируется нулевым указателем;
- если он имеет арифметический тип, он инициализируется нулевым (положительным или неотображенным),
- если он является агрегатом, каждый член инициализируется (рекурсивно) в соответствии с этими правилами;
- если это объединение, первый именованный элемент инициализируется (рекурсивно) в соответствии с этими правилами.
3.17.2, § 1:
неопределенное значение: либо неопределенное значение, либо представление ловушки
3.17.3, §1:
неопределенное значение: действительное значение соответствующего типа, если настоящий международный стандарт не налагает никаких требований на то, какое значение выбрано в любом случае. ПРИМЕЧАНИЕ Неопределенное значение не может быть ловушечным представлением.