Hace muchos meses, tuve que arreglar un código que causaba algunos problemas. El código se veía básicamente lo siguiente:¿Por qué esta recursión infinita obvia no da una advertencia del compilador?
int badFun() { return badFun(); }
Obviamente, esto causó un desbordamiento de pila, incluso en el lenguaje de alto nivel que estaba trabajando con (4Test en SilkTest). No hay forma de que este código pueda ser visto como beneficioso. La primera señal de problemas fueron las advertencias que se observaron después de que el script finalizó, pero no hubo errores de compilación o advertencias. Curiosamente, intenté escribir programas en C++, C# y Python con la misma estructura, y todos ellos compilados/interpretados sin errores de sintaxis o advertencias, incluso a pesar de que hubo errores de tiempo de ejecución en todos los casos. Ni siquiera vi ninguna advertencia en ninguno de estos casos. ¿Por qué no se ve esto como un posible problema por defecto?
EDIT: intenté escribir el equivalente de esa función en los tres idiomas, así que agregué esas etiquetas de función. Estoy más interesado en las razones generales por las que este código funciona sin advertencias. Por favor vuelva a etiquetar si es necesario.
¿Su pregunta es sobre C#, C++ * o * Python? La muestra del código se parece mucho a C# para mí. – BoltClock
No es tarea del compilador evitar que haga algo estúpido. En la mayoría de los idiomas, es posible que algún evento externo provoque que un constructo como este salga. –
En MSVC (C++), le dará una advertencia si llama a la función: 'advertencia C4717: 'badFun': recursivo en todas las rutas de control, la función provocará el desbordamiento de la pila en tiempo de ejecución' – Mysticial