Dlaczego istnieją dwie różne wersje?
To trochę skomplikowane jeśli nie masz doświadczenia z programami konsolowymi.
Ogólnie main()
i main(int argc, char* argv[])
działają dokładnie tak samo. Różnica polega na tym że ten drugi main dostaje dodatkowe parametry, które w przypadku pierwszego są ignorowane.
Czym są te parametry - w dawnych czasach DOSa programy uruchamiało się z lini poleceń. Czyli np. chcąc uruchomić program 'usun_folder' wpisywało się na ekranie 'usun_folder' i naciskało enter, po czym program się uruchamiał. Czasami zachodziła jednak potrzeba przekazania parametru dla programu. Na przykład program 'usun_folder' mógłby prosić użytkownika o podanie nazwy folderu, ale znacznie szybciej byłoby napisać 'usun_folder moje_zdjecia' - i tekst 'moje_zdjecia' jest w tym przypadku parametrem programu. Może być więcej parametrów, na przykład 'usun_folder moje_zdjecia --podfoldery' (dodatkowy parametr '--podfoldery' który rozkazuje, na przykład, usunąć również podfoldery).
Tak czy inaczej wszystkie te parametry idą do tablicy argv -
argv[0] = "usun_folder" // zerowy parametr to zawsze ścieżka do programu
argv[1] = "moje_zdjecia"
argv[2] = "--podfoldery"
Argc służy do określania ilości parametrów - w tym przypadku wynosi 3.
W aplikacjach Windowsowych parametry są coraz mniej przydatne. W sumie program uruchamiany dwuklikiem dostaje tylko jeden parametr - ścieżkę do siebie (sprawdź jeśli chcesz). Jeśli masz ochotę poeksperymentować, możesz utworzyć skrót do programu i tam zmienić parametr 'wiersz polecenia' albo uruchomić stare, dobre cmd (klawisz logo_windows + R, wpisujesz cmd i enter), przejść do folderu z twoim programem i uruchomić go z parametrami.
Podsumowując, dopóki nie chcesz żeby twój program był uruchamiany za pomocą cmd, możesz równie dobrze używać zwykłego main() bez parametrów.
A nie da się od razu bezpośrednio po otwarciu .cpp skompilować??
Raczej nie, trzeba stworzyć projekt (taka uroda VS).