2011-04-22 22 views
5

Se estrella en la ejecución:¿Por qué sigue este programa estrellarse

#include <iostream> 

int main() 

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

¿Por qué?

+0

Parece un bucle infinito para mí. – yogsma

+1

Espero que te hayamos ayudado con tu tarea ... ;-) –

+6

Tiene algo que ver con este sitio ... –

Respuesta

11

Se estrella debido a Stackoverflow por supuesto, ya que, no hay una condición de terminación, pero técnicamente se permite que el C++ compilador no compilar, ya que en C++:

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

Lo que dice la norma:

anexo de C Compatibilty

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

Según el nombre del sitio que está causando un desbordamiento de pila.

Cada vez que su programa hace la declaración if pone un poco de información en la pila para que pueda regresar. sin embargo, el programa seguirá repitiendo esto hasta que se agote el espacio, causando un desbordamiento de la pila.

0

Si la función main llama a las funciones main, tiene una profundidad de anidamiento infinita. Sin embargo, cada nivel de anidación necesita un poco más de memoria. Como este proceso nunca termina, eventualmente se ejecuta la memoria disponible (precisamente, la memoria de la pila, que es del orden de magnitud de algunos megabytes y realmente muchas llamadas de función). Entonces el sistema operativo mata el proceso.

2

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

no se utilizará la función main (3.2) dentro de un programa. El enlace (3.5) de main está definido por la implementación. Un programa que declara que main está en línea o estático está mal formado. El nombre principal no está reservado de otra manera. [Ejemplo: las funciones miembro, las clases y las enumeraciones se pueden llamar main, al igual que las entidades en otros espacios de nombres. ]

Cuestiones relacionadas