• 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?

VPS Starter Arubacloud
0 głosów
2,055 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ź 342 wizyt
pytanie zadane 1 lipca 2022 w C i C++ przez polandonion Dyskutant (7,560 p.)
0 głosów
1 odpowiedź 147 wizyt
0 głosów
1 odpowiedź 925 wizyt
pytanie zadane 5 maja 2021 w C i C++ przez Shefir Nowicjusz (120 p.)

93,013 zapytań

141,977 odpowiedzi

321,267 komentarzy

62,355 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...