[C++] int main()

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

[C++] int main()

Post autor: Luminofor » 25 lut 2009, 1:37

Witam, nie rozumiem czemu się pisze zawsze int main(), znaczy się main jest obiektem integer?
Liczbą całkowitą? Niech to ktoś wyjaśni, bo tego nawet nie ma w Symfonii C++ wyjaśnionego...

spark
Użytkownik
Posty: 412
Rejestracja: 25 lis 2004, 15:50
Lokalizacja: Wrocław

Post autor: spark » 25 lut 2009, 7:23

Każdy program widziany z punktu widzenia systemu jest funkcją, a każda funkcja może zwrócić wynik swojej operacji. Int przed main'em mówi, że po wykonaniu programu zostanie zwrócona do systemu operacyjnego wartość całkowita. Przyjęto iż dobrze wykonany tzn. bezbłędnie działający program, który nie napotkał żadnych problemów w trakcie działania zwraca do systemu operacyjnego wartość 0. Wartość inna od zerowej oznacza iż w programie wystąpiły błędy. Po jej wartości programista może dojść do wniosku gdzie wystąpił błąd w programie. Wartości te nie są z góry ustalone i określa je programista wg. upodobań. Na przykład, gdy program nie będzie mógł otworzyć strumienia odczytu do jakiegoś pliku, można przyjąć iż w tym momencie program zwróci wartość 1. Przy innym błędzie inna wartość itp. itd.

Awatar użytkownika
olo16
Użytkownik
Posty: 396
Rejestracja: 12 paź 2007, 16:37
Lokalizacja: w-wa

Post autor: olo16 » 27 lut 2009, 15:02

Luminofor pisze:znaczy się main jest obiektem integer?
:mrgreen: Main jest funkcją zwracjącą typ integer.

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 28 lut 2009, 12:43

Ważne: jeśli funkcja ma zwracać typ integer to argumenty na których wykonujemy operacje, a są zadeklarowane w tych nawiasach też muszą być zadeklarowane jako int. Jeśli zrobisz inaczej kompilator wyświetli błąd. Pamiętaj.

MiW
Użytkownik
Posty: 226
Rejestracja: 28 sty 2007, 11:32
Lokalizacja: Kraków
Kontakt:

Post autor: MiW » 28 lut 2009, 17:16

GrzesiekG, ?????

Awatar użytkownika
olo16
Użytkownik
Posty: 396
Rejestracja: 12 paź 2007, 16:37
Lokalizacja: w-wa

Post autor: olo16 » 28 lut 2009, 20:00

GrzesiekG pisze:jeśli funkcja ma zwracać typ integer to argumenty na których wykonujemy operacje, a są zadeklarowane w tych nawiasach też muszą być zadeklarowane jako int
Błagam cię, nie profanuj C++ ! Typy argumentów mogą być DOWOLNE! W funkcji main wygląda to akurat:

Kod: Zaznacz cały

int main(int argc, char *argv[])
(środowisko Dev C++, nie wiem jak w innych)
argc to liczba argumetów do programu, a argv[] to tablica argumetów typu char* , czyli łańcucha znakowego.

gof
-
Posty: 4
Rejestracja: 03 gru 2007, 3:39
Lokalizacja: Warszawa
Kontakt:

Post autor: gof » 03 mar 2009, 7:49

Wartości te nie są z góry ustalone i określa je programista wg. upodobań.
Oprócz tego stdlib określa EXIT_SUCCESS i EXIT_FAILURE (odpowiednio 0 i 1).
olo16 pisze:

Kod: Zaznacz cały

int main(int argc, char *argv[])
Jak nie zmieniasz explicite zawartości argv to proponuję:

Kod: Zaznacz cały

char * const argv[]
.

Awatar użytkownika
bsw
Użytkownik
Posty: 100
Rejestracja: 14 kwie 2008, 13:13
Lokalizacja: Małopolska
Kontakt:

Post autor: bsw » 03 mar 2009, 11:29

Dodam jeszcze że to co zwróci funkcja main() jest dostępne w systemie operacyjnym jako zmienna środowiskowa ERRORCODE.

Natomiast parametry funkcji main:

int argc, char *argv[]

to odpowiednio:
argc - ilość parametrów lini poleceń wywołania programu
*argv[] - wskaźnik do tablicy zawierającej te parametry.

Wszystko to pochodzi z czasów C (bez ++) i programów konsolowych gdzie parametry wywołania i zmienna środowiskowa ERRORCODE były często wykorzystywane przy pisaniu plików wsadowych powłoki *.bat
Przyznam się że nadal zdarza mi się z tego korzystać. W Windows - nawet XP - można wiele rzeczy sobie uprościć pisząc odpowiednie skrypty *.bat lub *.cmd. A jak zabraknie polecenia powłoki to można szybko skrobnąć programik w C[++] :-)

gof
-
Posty: 4
Rejestracja: 03 gru 2007, 3:39
Lokalizacja: Warszawa
Kontakt:

Post autor: gof » 03 mar 2009, 16:38

Dawno nie używałem niczego od MS, ale kojarzy mi się że ERRORLEVEL a nie ERRORCODE.

Pod systemami POSIX-owymi (Linux itd.) odpowiednikiem jest $?, są też możliwości wykonania warunkowego innych poleceń, jak chociażby && (dla $? == 0) i i || (w pozostałym przypadku).

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 06 mar 2009, 22:50

Dobra dzięki już rozumiem za bardzo odbiegacie od tematu.

ODPOWIEDZ