Siempre que declares a la función main adecuadamente como
int main (int argc, char* argv[])
o
int main (void)
vas a tener que retornar un entero! Porque justamente, la declaración de la función lo indica. El "int" antes del nombre de la función es lo que indica lo que si o si debe devolver la función, por ende, en este caso, es necesario retornar un entero.
Podés retornar el entero que quieras, pero por convención, el número 0 quiere decir que no hubo problemas con la función! Por ende, siempre se coloca return 0; al final del main.