La función exit la puedes llamar cuando quieras terminar tu programa sin tener que hacer el return en main.
void terminar()
{
cout << "Terminando..." << endl;
exit(EXIT_SUCCESS); // aquí termina el programa
}
int main()
{
cout << "Iniciando" << endl;
terminar();
cout << "esto nunca se ejecuta" << endl;
return EXIT_FAILURE;
}
La función atexit toma como parámetro un puntero a función (callback o para usar terminología moderna -de C#-, delegado). C hará entonces que cuando se termine la aplicación -digamos, llamando a exit()- antes de terminar el programa se mande llamar a la función que estableciste como parámetro. Esto es útil, por ejemplo, para hacer labores de limpieza al terminar un programa.
void fnExit1 (void)
{
printf ("Saliendo del programa (1)\n");
}
void fnExit2 (void)
{
printf ("Saliendo del programa (2)");
}
int main ()
{
atexit (fnExit1);
atexit (fnExit2);
printf ("Estamos en main.\n");
return 0;
}
La salida del programa anterior sería:
Estamos en main.
Saliendo del programa (1)
Saliendo del programa (2)
La función abort(), a diferencia de exit(), termina abruptamente el programa, mostrando en consola un mensaje de error. La diferencia entre exit y abort, es que exit cierra flujos de memoria -como archivos- que haya abierto previamente, mientras que con abort no. Esto se emplea cuando sucedió algo muy grave y el sistema ya no se puede recuperar.
Finalmente, abs() regresa el valor absoluto del parámetro.
Saludos.