¿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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta