¿Es un comportamiento bien definido salir del programa antes de main?
Definitivamente es posible ejecutar código antesmain
Se llama, como se ve por muchos ejemplos enesta pregunta.
Sin embargo, ¿qué pasa si en ese código pre-main, se le dice al programa que salga a través destd::exit
ostd::abort
? Ya quemain
se define como el inicio de un programa, ¿qué consecuencias tiene la salida antes del inicio?
Al imprimir algo en cada sección, obtengo los siguientes resultados:
Formato:
Sección: output
Principal: main
Init (llamado antes principal): init
Salir (configurar constd::atexit
dentro de Init): exiting
Ejecuciones de muestra:
Init llamado sin salir:
en eso
principal
devuelve 0
Init llama a std :: exit (0):
en eso
devuelve 0
Init llama std :: abortar
en eso
se bloquea y devuelve 3 en Windows con GCC 4.7.2
Se estrella y abre la caja habitual con VS11.
devuelve 0 en LiveWorkSpace
Init establece el manejador y llama a std :: exit (0):
en eso
saliendo
devuelve 0
Init establece el manejador y llama a std :: abort:
en eso
mismo trato que sin el manejador
Mientras buscaba, vi esta pregunta:¿Hay alguna manera de que un programa C / C ++ pueda fallar antes de main ()?. Sin embargo, no responde a lo que quiero saber: ¿Es alguno de estos comportamientos, llamandostd::exit
ostd::abort
antes demain
, bien definido? ¿Alguno de este comportamiento indefinido?