2011-04-22 12 views
5

rozbija się na wykonanie:Dlaczego ten program zachować upaść

#include <iostream> 

int main() 

{ 
    if(main()); 
    return 0; 
} 

Dlaczego?

+0

Wygląda nieskończonej pętli do mnie. – yogsma

+1

Mam nadzieję, że pomogliśmy ci rozwiązać twoje zadanie domowe ... ;-) –

+6

To jest coś związanego z tą stroną ... –

Odpowiedz

11

zawiesza się z powodu Stackoverflow oczywiście, ponieważ nie ma warunek kończący, ale technicznie C++ kompilator jest dozwolone, aby go nie skompilować, ponieważ w C++:

main() cannot be called from within a program. 
The address of main() cannot be taken. 
The main() function cannot be overloaded. 

Co mówi średnia:

Załącznik do C zgodnością

3,6

Change: Main cannot be called recursively and cannot have its address taken 
Rationale: The main function may require special actions. 
Effect on original feature: Deletion of semantically well-defined feature 
Difficulty of converting: Trivial: create an intermediary function such as mymain(argc, argv). 
How widely used: Seldom 
0

Zgodnie z nazwą witryny, którą powodują przepełnienie stosu.

Za każdym razem program robi oświadczenie if stawia trochę informacji na stos więc może powrócić. jednak program będzie ciągle to powtarzać, aż zabraknie miejsca, powodując przepełnienie stosu.

0

Jeśli funkcja main wywołuje funkcje main, masz nieskończoną głębokość zagnieżdżania. Jednak każdy poziom zagnieżdżenia wymaga nieco więcej pamięci. Ponieważ proces ten nigdy się nie kończy, w końcu uruchamiasz dostępną pamięć (dokładnie, pamięć stosu, która jest rzędu wielkości kilku megabajtów i naprawdę wiele wywołań funkcji). Następnie system operacyjny zabija proces.

2

ISO/IEC 14882: 2003 (E) 3.6.1 (3)

Główną funkcją nie stosuje się (3.2) w ramach programu. Powiązanie (3.5) głównego jest zdefiniowane przez implementację. Program, który deklaruje, że jest liniowy lub statyczny, jest źle sformułowany. Główne imię nie jest zastrzeżone. [Przykład: funkcje członkowskie, klasy i wyliczenia mogą być nazywane głównymi, podobnie jak jednostki w innych obszarach nazw. ]

Powiązane problemy