Se ejecuta el módulo inicial.
Durante la fase de enlazado de la compilación, el enlazador añade a cualquier programa un módulo especial,
de inicio, que es realmente el punto de entrada a la ejecución del programa. Este módulo realiza diversas tareas,
entre ellas iniciar todas las variables estáticas o globales (ver nota), controlar la ejecución de posibles funciones
opcionales de inicio (ver punto siguiente) y finalmente, invocar la función main.
Se ejecutan las funciones de inicio.
Algunos compiladores permiten al programador la opción de que se invoquen determinadas funciones,
antes que se realice la llamada a main. Estas funciones representan tareas preparatorias adicionales,
que queremos realizar antes de que se inicie la ejecución. Esto se consigue con la directiva de inicio.
Se invoca la función main()
Después de lo anterior, el control pasa a una función que debe responder al nombre de main y le pasa
algunos argumentos en base a datos que ha recibido a su vez del Sistema Operativo
Se ejecutan las funciones de salida.
Algunos compiladores permiten la opción de llamar determinadas funciones antes que se alcance el final
del programa, justo antes de su terminación. Estas funciones, que representan tareas adicionales que
queremos realizar antes de que el programa devuelva el control a su entorno de ejecución. Se establecen con la directiva.
Finalización
Se termine la función main(). Bien porque se alcance el corchete de cierre "}", bien porque se encuentra una
sentencia return; esto último es lo deseable (aunque no imprescindible), ya que el estándar define que main
debe devolver un int a su entorno de ejecución.
Se encuentra una invocación a la función exit(), una función de la Librería Estándar.
Se encuentra una invocación a la función abort(), otra función Librería Estándar.
Se lanza una excepción que no encuentra su manejador ("handler") correspondiente