Jak słusznie mój poprzednik wspomniał, main to nie jest żadna pętla, lecz funkcja. Jest to taka wyjątkowa funkcja, ponieważ prawie każdy kod źródłowy pisany w języku C++ (wykluczając między innymi biblioteki) musi tę funkcję posiadać.
Jak słusznie zauważyłeś, funkcja ta zwraca typ int. Ale po co?
Funkcja main, upraszczając, jest wywoływana (niekoniecznie bezpośrednio) przez system operacyjny. Jako parametry podaje on między innymi argumenty, z jakimi został wywołany nasz program. Taki standardowy nagłówek funkcji main() wygląda tak:
int main(int argc, char* argv[])
Chociaż jako ciekawostkę powiem, że istnieje również wersja z trzema parametrami.
Natomiast system operacyjny (jak i część użytkowników) odczekuje od Twojego programu odpowiedzi - czy wszystko wykonało się poprawnie? Oczywiście, ty możesz to wyraźnie napisać w programie. Ale co wtedy, kiedy użytkownik Twojego programu będzie chciał wykorzystać go w jakimś skrypcie?
Załóżmy, że jesteś autorem programu konsolowego dodającego użytkowników w systemie. W jaki sposób skrypt miałby sprawdzić, czy wszystko poszło jak należy? Chyba przydałaby się wygodniejsza metoda sprawdzenia tego, niż analizowanie tekstu, który wypisałby twój program. O ile dla człowieka nie stanowi to problemu, dla skryptu już większy.
Właśnie po to służy wartość zwracana przez funkcję main. Przykładowo, polecenie useradd w systemie Linux zwraca odpowiednie wartości zależnie od tego czy udało się stworzyć użytkownika, czy nie i ewentualnie jaki błąd wyskoczył: czy użytkownik już istniał, czy może niepoprawnie skorzystaliśmy z programu podając mu złe dane, czy może grupa do której chcieliśmy dodać użytkownika nie istnieje.
Zazwyczaj jest tak, że program który zwraca 0 informuje w ten sposób, że wykonał się jak najbardziej poprawnie, a program zwracający inne wartości - już niekoniecznie.
Pozostaje jeszcze jedno pytanie - jak tę wartość odczytać?
W systemie Windows errorlevel (czyli właśnie ta wartość zwrócona przez funkcję main) ostatniego wykonanego polecenia znajduje się w zmiennej środowiskowej... %errorlevel%. Aby ją sobie wypisać, możesz zastosować polecenie CMD:
echo %errorlevel%
Natomiast na systemach Unix i Uniksopodobnych (np. Linux, BSD, macOS), wartość ta siedzi w zmiennej $?. Aby ją wyświetlić, stosujemy składnię (bash):
echo $?
No i to tyle.
Jako ciekawostkę powiem, że w C++ nie ma obowiązku pisania returna na końcu funkcji main - zwróci się automatycznie zero. W każdym razie należy pamiętać, że jest to jedyna w swoim rodzaju taka funkcja. W innych funkcjach zwracających jakiś typ wartości musimy sami zadbać o to, aby jakaś wartość została zwrócona.