Entiendo perfectamente que cada programa tiene que devolver un valor, o no, pero nunca he entendido porque, por ejemplo cuando retorna un 0 la función principal es para indicar que el programa se ha ejecutado sin ningún tipo de problemas, pero el nombre retornar me ha echo liarme y pensar que cuando el programa ha terminado de procesar todo el código el numero 0 en el caso de por ejemplo una función main() sin llamada del sistema operativo o de otro programa, se devuelve a la parte de int main(), creo que no me he explicado muy bien aunque no sé otra forma de explicar como lo pienso, dejare una imagen de lo que me ha echo pensar que hace el 0 en el retorno:
Igual no tiene mucha lógica pero bueno si alguien me explica que hace el 0 o por donde "viaja".
Gracias de antemano.