2016-12-31 3 views
-2

Почему следующий код не заканчивается вообще?Почему следующий код не заканчивается?

int main() 
{ 
    printf("Hello world\n"); 
    main("hello",32); 
    return 0; 
} 
+4

Правильно ли компилируется ваш код? –

+0

да это скомпилировано. –

+1

Рассмотрим утверждение 'printf («Hello World \»)'. Окончательные двойные кавычки отсутствуют. Когда вы используете символ «\», символ, следующий за ним, не используется в обычном смысле (также называемый escape-последовательность). Более того, вы не должны передавать какие-либо аргументы в «main» –

ответ

8

Существует рекурсивный вызов функции main() (по линии 4 в коде), что приводит к неограниченному рекурсии.

+0

Но есть только один вызов: –

+7

main() вызывает сам себя и является неограниченной рекурсией. Вы можете изучить рекурсию, чтобы понять, что происходит. – codeforester

+0

@Anurag Читайте о рекурсивных вызовах функций.Когда «main» вызывается в первый раз, он вызывает вызов для других «основных» и так далее. –

0

Приведенный выше код дает ошибки компиляции. Правильный код может быть -

int main() 
{ 
    printf("Hello world"); 
    main(); 
    return 0; 
} 

Это происходит в бесконечном цикле, потому что «основные» рекурсивен, называющие себя, и нет никаких условий терминатора.

0

Код генерирует ошибку компиляции «Дополнительный параметр при вызове главного» , если он запущен без какого-либо параметра в главном, то это будет рекурсивный вызов для основной функции, поэтому он не прерывается.

1

Ваш код никогда не достигнет инструкции return 0; ... потому что функция main вызовет себя до этого. Во второй раз, когда код запускается, он снова вызовет себя, а затем, когда main будет запущен снова, он вызовет себя перед достижением оператора возврата ... Это будет продолжаться вечно.

0

ОК, есть две вещи здесь:

  1. Стандарт говорит, что есть только два пути, чтобы написать main: int main(void) {} и int main(int argc, char* argv[]) {}. Вы не используете ни одного из них, что делает

  2. main функция принимает не указано количество аргументов. И таким образом вы должны не ожидать, что ваша функция main не принимает никаких аргументов.

В результате второй точки, даже это было бы скомпилировать и запустить:

int main() 
{ 
    printf("Hello world\n"); 
    main("hellow",32, "cow", 3.14); 
    return 0; 
} 

Запись int main(void) и посмотреть, что компилятор должен сказать о рекурсивном вызове. HTH.

Смежные вопросы