• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

int main() - po co on coś zwraca?

Object Storage Arubacloud
0 głosów
1,895 wizyt
pytanie zadane 6 listopada 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)
Na końcu maina jest "return 0" ale po co on właściwie? (mam na myśli konsolę, obiektówki nie ruszałem więc nie wiem jak tam)

4 odpowiedzi

+5 głosów
odpowiedź 6 listopada 2015 przez hit02 Nałogowiec (33,970 p.)
edycja 6 listopada 2015 przez hit02
 
Najlepsza
Jest to głównie informacja o błędzie. Przydaje się np przy automatyzacji pewnych zadań za pomocą skryptów, bo możesz się spytać systemu, jaki kod zwrócił program. Wartość ta jest to przechowywana w pseudo-zmiennej środowiskowej ERROELEVEL. (Dla testu możesz np. wywołać jakiś program z konsoli, a następnie polecenie echo %ERRORLEVEL%)

Ważne jest też to, że gdy program zakończył się poprawnie, to zazwyczaj zwraca 0, gdy z błędem, to częst 1 (lub inną liczbę oznaczającą, co poszło nie tak), a jeżeli program się scrashuje, to ta wartość będzie 'losowa' (albo bardziej niedeterministyczna, bo jej wartość zależy od tego, podczas czego program się wywalił).

PS To, co napisałem o ERRORLEVEL dotyczy systemu Windows. Na innych systemach może być inaczej.

PPS Obiektówka nie oznacza od razu odejścia od konsoli. Jest to sposób programowania, więc wszystko to, co napisałem dotyczy również obiektówki. Natomiast prawdą jest, że twórcy aplikacji okienkowych przykładają mniejszą wagę do takich rzeczy, jak wartość zwracana lub argumenty programu. W skrócie obiektowość != okienkowość.
komentarz 6 listopada 2015 przez furas Maniak (53,800 p.)

W Bash zamiast ERRORLEVEL jest $? .

W Linux zwracaną wartość wykorzytuje się też przy połączeniach && (AND) oraz || (OR).

Jeśli program poprawnie się skompiluje to go wykonaj:

 skompiluj.exe && wykonaj.exe

Jeśli jeden program sobie nie poradził to spróbuj innego:

 pierwsza_metoda.exe || druga_metoda.exe

 

0 głosów
odpowiedź 6 listopada 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Funkcję main wywołuje system operacyjny. Zwracasz wartość po to, żeby OS dowiedział się, czy wszystko się powiodło. Jeżeli wartość jest równa 0 - wszystko OK. Natomiast jeśli wartość jest inna niż zero, może podjąć wtedy odpowiednie środki.
komentarz 6 listopada 2015 przez C☺ndzi Stary wyjadacz (12,100 p.)
No tak, ale jak main zwraca tą "1" to program się kończy, więc jak ma podjąć to działanie?
komentarz 6 listopada 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Jest (Linuxa się dopiero uczę od kilku miesięcy więc, ale w DOSie/Windowsie jest) taka zmienna środowiskowa errorlevel, w której przechowuje się to, co zwrócił program.

P.S. Nie wiem po co Ci to piszę, jak już hit napisał dokładnie to samo (teraz się zorientowałem) :D
0 głosów
odpowiedź 6 listopada 2015 przez niezalogowany
Ten program też jednak coś wywołuje, czyli system (czy jakoś tak, system wywołuje ten program, ale ja nie wiem za bardzo jak to działa), dlatego też musi coś zwrócić :)
0 głosów
odpowiedź 6 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)

Z tego, co mi wiadomo, nie da się pobrać wartości zwracanej z funkcji int main. Najprawdopodobniej jest ona tylko potrzebna dla kompilatora (jak dobrze wiesz, kompilatory same dodają return 0, gdy funkcja nie ma zdefiniowanej wartości zwracanej).

A co z void main? Wg tego, co przeczytałem, GCC nie obsługuje takiej funkcji, ale już Visual C++ Compiler tak, ale standard jasno mówi, że może być tylko int main, więc warto się tego trzymać.

komentarz 6 listopada 2015 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Tutaj bym trochu doprecyzował:

  1. System Operacyjny zapisuje to co zwrócił program w zmiennej %errorlevel%
  2. Tak, kompilatory dodają same return 0; jeżeli nie poda tego użytkownik, ale tylko dla funkcji int main(); Jeżeli programista stworzy funkcję zwracającą np. inta, to niezwrócenie wartości jest błędem i powinno być zgłoszone przez kompilator.
komentarz 6 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)

Tak, chodziło mi o funkcję main, nie doprecyzowałem wink

Podobne pytania

+1 głos
1 odpowiedź 317 wizyt
pytanie zadane 1 lipca 2022 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 134 wizyt
0 głosów
1 odpowiedź 685 wizyt
pytanie zadane 5 maja 2021 w C i C++ przez Shefir Nowicjusz (120 p.)

92,580 zapytań

141,432 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...