Классы хранения: Понимание Статики

Я не могу понять вывод этой программы

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.

Другие вопросы по тегам