Gcc автоматически инициализирует статические переменные в ноль?
У меня есть статическая переменная, объявленная, но неинициализированная в функции. Будет ли эта переменная инициализироваться нулем автоматически?
static int idx;
2 ответа
Да - стандарты C ISO/IEC 9899:1999 или C99 (и C++) говорят, что так и должно быть. См. Пункт 10 в разделе 6.7.8 ("Инициализация") WG14 N1256 для точного текста.
Как уже отмечали другие, рекомендуется всегда инициализировать статические переменные:
static int idx = 0;
Причина этого не в том, что какой-то компилятор не всегда может инициализировать статические переменные в ноль (любой компилятор, который не смог выполнить такую инициализацию, был бы окончательно сломан и не мог претендовать на то, чтобы быть компилятором C или C++), это Say What Вы имеете в виду - возможно, самое основное правило программирования.
Хотя стандарты говорят "да"... Хорошая практика показывает, что вы всегда должны инициализировать переменные. Вы никогда не знаете, когда вы меняете компилятор, или вам нужно скомпилировать его на другом компьютере, вы хотите минимизировать вероятность непредвиденного поведения.