IIRC, безусловно, не требуется, чтобы неинициализированные глобальные переменные были установлены на ноль, и я уверен, что я слышал о случаях, когда это не так.Как всегда, будьте осторожны и всегда инициализируйте свои переменные самостоятельно, если вы боитесь, что это станет проблемой.
Лично я стараюсь никогда принимать что-либо как должное.Мало того, что это делает явным, аккуратно обходят любые такие проблемы, но он также дает понять, кто читает ваш код, что вы ожидаете, чтобы иметь дело.
РЕДАКТИРОВАТЬ: Я имеюс тех пор было исправлено, что стандарты do требуют инициализации глобалов на ноль.Просто чтобы прояснить мою плохую формулировку выше, я не имею в виду, что абсолютно ничто не может считаться само собой разумеющимся (это абсурд), а скорее, что если есть простой и краткий способ не , принимающий что-то как должное, сделайте это.
Причина, по которой я придерживаюсь этого подхода, заключается в том, что, хотя большинство программистов могут полагаться на компиляторы с поведением, совместимым со стандартами, многие из нас работают в средах, где соответствие стандартам не всегда возможно по любой причине(аппаратные ограничения микроконтроллеров - хороший пример, или посмотрите пример Стива в комментариях).Я также утверждаю, что не существует никакого компилятора, который бы полностью соответствовал стандартам (кроме тех случаев, когда компилятор определяет стандарт).
Когда я вижу int myGlobal=0;
вфайл, я знаю наверняка , что myGlobal
имеет значение ноль.Если он просто объявлен как int myGlobal;
, то в стандарте сказано, что также должно иметь значение ноль.Это не гарантирует, что будет , и я считаю, что ввод дополнительных двух символов не требует больших затрат, повышает удобочитаемость программы и повышает переносимость, если вы обнаружите, что вам когда-нибудь понадобится скомпилировать код наплатформа, которая не инициализирует глобальные переменные. Это моя точка зрения - почему бы и нет, и вы можете просто прикрыть себя, даже если в стандарте говорится, что должно быть в порядке.