Окно вывода застряло на черном экране - PullRequest
1 голос
/ 31 марта 2011
#include<stdio.h>

int main()
{
    static int x;
    if(x == 10)
    printf("\n thanks...");
    x++;
    return (x=main());
}

При запуске программы она застревает на выходе:

спасибо ...

В чем здесь проблема?

Ответы [ 2 ]

5 голосов
/ 31 марта 2011

Нет условий завершения для этой рекурсии.Следовательно, приводит вас к - a - StackOverflow .

Возможно, это то, что вы хотели попробовать:

#include<stdio.h>

int main(void)
{

    static int x;

if(x==10)
{
    printf("\n thanks...");
    return 0;  // --> Missing
}
x++;
return (x=main());
}
1 голос
/ 31 марта 2011

Я выполнил программу, и она действительно вылетает, как и ожидалось.Вызов рекурсии выполняется без остановки, и когда в сегменте стека больше нет места, это происходит.

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

...