Подтвердить что ты не робот

Gcc автоматически инициализирует статические переменные до нуля?

У меня есть статическая переменная, объявленная, но неинициализированная в функции. Будет ли эта переменная автоматически инициализирована до нуля?

static int idx;
4b9b3361

Ответ 1

Да - стандарт C ISO/IEC 9899: 1999 aka < Стандарты i1 > (и С++) говорят, что это должно быть так. См. Пункт 10 в разделе 6.7.8 ( "Инициализация" ) WG14 N1256 для точного текста.

Как указывали другие, рекомендуется всегда инициализировать статические переменные:

static int idx = 0;

Причина этого заключается не в том, что некоторые компиляторы не всегда могут инициализировать статические переменные до нуля (любой компилятор, который не смог выполнить такую ​​инициализацию, был бы окончательно разорван и не мог претендовать на компилятор C или С++), это сказать, что вы имеете в виду - возможно, самое основное правило программирования.

Ответ 2

Пока стандарты говорят "да"... Хорошая практика показывает, что вы должны всегда инициализировать переменные. Вы никогда не знаете, когда вы меняете компилятор или хотите скомпилировать его на другом компьютере, вы хотите свести к минимуму любые потенциальные возможности для непредвиденного поведения.