Main je prva funkcija koja se poziva prilikom pokretanja programa i budući da je to funkcija tipa int (jer "int main()") ona mora vratiti neku cjelobrojnu vrijednost. "return 0" znači da je program uspješno odradio svoj posao, tj. nije došlo do nekakvih neočekivanih grešaka i ta vrijednost se obično vraća operativnom sustavu da bi on znao da je program ispravno izvršen.
EDIT:
Ukoliko return 0; nije napisan u kodu, compiler će ti po defaultu vratiti 0 na kraju maina. Bar znam da gcc compiler to radi.