Причиной отсутствия определения начального значения переменных в локальных / локальных переменных является эффективность.Стандарт C ожидает, что ваша программа выделит ваш массив и позже заполнит его:
int array[10];
for (i = 0; i < 10; ++i)
array[i] = i * 42;
В этом случае любая инициализация будет бессмысленной, поэтому стандарт C хочет этого избежать.
Есливашей программе нужно, чтобы эти значения были инициализированы нулем, вы можете сделать это явно:
int array[10] = {0}; // initialize to zero so the accumulation below works
while (condition)
{
... // some code
for (i = 0; i < 10; ++i)
array[i] += other_array[i];
}
Это ваше решение, инициализировать или нет, потому что вы должны знать, как ведет себя ваша программа.Это решение будет различным для разных массивов.
Однако это решение не будет зависеть от компилятора - все они соответствуют стандарту.Одна маленькая деталь относительно переносимости - если вы не инициализируете свой массив и все еще видите все нули в нем, когда используете определенный компилятор - не обманывайте себя;значения все еще не определены;вы не можете полагаться на то, что они равны 0.
Некоторые другие языки решили, что нулевая инициализация достаточно дешева, даже если она излишня, а ее преимущество (безопасность) перевешивает ее недостатки (производительность).В C производительность важнее, поэтому он решил иначе.