En C (y C++) Cuando se llama a un programa se está llamando a una función principal llamada "main" que es la que va a iniciar la ejecución y cuando esta termine devolverá el contol otra vez al sistema operativo.
Es una función estandarizada para lanzar programas
La función main tiene dos modos de escribirse , esta es la forma completa y la otra es sin parámetros.
La función main es una función que devuelve un entero pero tambien puede ser una función tipo void con lo cual no haría falta la sentencia return 0;.
En este caso da igual porque estamos iniciando el programa pero el valor return suele se 0 si todo ha funcionado correctamente y otro valor se asocia a algún error cometido. esto es muy práctico cuando se realiza trabajo en equipo y un segundo no tiene por que conocer nada de como funciona el programa que tu has hecho y el utiliza.
Los dos parámetros que recibe son un entero, int que cuenta el número de parámetros que recibe. y un vector de cadenas de caracteres donde se almacenan cada uno de los parámetros recibidos.
Estos dos parámetros pueden llevar otro nombre, pero ¿que necesidad?
argc es un entero mayor o igual que 1.
Puede haber un 3º parámetro donde se recibe información sobre el entorno.