Классы хранения: Понимание Статики
Я не могу понять вывод этой программы
int main()
{
static int i=5;
if(--i) {
main();
printf("%d ",i);
}
}
Выход 0 0 0 0
Я сомневаюсь, почему static не будет инициализирован при первом вызове main? Вывод, если я предполагаю, что static инициализируется при первом вызове 5, а затем распределяется между вызовами, должен быть 4 3 2 1
Спасибо!
2 ответа
Призыв к main()
вызывается рекурсивно 4 раза перед любым printf()
Заявление называется. Ко времени первого printf()
вызывается, --i
был вызван рекурсивно 4 раза. поскольку i
является статическим, его значение равно 0 в этой точке, и это значение, которое печатается.
Если вы не выбираете i
быть static
, программа застрянет в бесконечных вызовах main()
так как в каждом звонке будут новые i
со значением 5. Когда main()
называется снова, printf()
оператор помещается в стек и позже, когда i
становится 0, все printfs печатают значение i, то есть 0.