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

exit(EXIT_SUCCESS) vs. return EXIT_SUCCESS vs. return 0

Object Storage Arubacloud
0 głosów
1,507 wizyt
pytanie zadane 11 marca 2017 w C i C++ przez Evelek Nałogowiec (28,960 p.)

W odniesieniu do C/C++, czy jest jakaś konkretna różnica pomiędzy return EXIT_SUCCESS a exit(EXIT_SUCCESS) a return 0?

Tak sobie czytam z ciekawości ten post i się zastanawiać zacząłem: http://stackoverflow.com/questions/8867871/should-i-return-exit-success-or-0-from-main

Słyszałem tylko, że exit() brzydko program zamyka, bez komunikatu żadnego.


#include <stdio.h> 
#include <stdlib.h>
int main(void)
{
	return EXIT_SUCCESS;
}


#include <stdio.h> 
#include <stdlib.h>
int main(void)
{
	exit(EXIT_SUCCESS);
}


#include <stdio.h> 
int main(void)
{
	return 0;
}

 

Takie wnioski po przeczytaniu tego ze Stackoverflow:

  • Jak zaczynamy używać EXIT_SUCCESS to dla symetryczności używamy też EXIT_FAILURE.
  • Jeśli chcę używać EXIT_SUCCESS oraz EXIT_FAILURE to muszę dopisać do programu #include <stdlib.h> co raczej zbyt dużego wpływu nie ma na rozmiar pliku, tym bardziej, że mogę w swoim programie korzystać z innej funkcji korzystającej z biblioteki stdlib.h.
komentarz 12 marca 2017 przez niezalogowany
Za dużo kolorów w twoim pytaniu :/
komentarz 12 marca 2017 przez Evelek Nałogowiec (28,960 p.)
Tyle samo co w Visual Studio u mnie. :P

2 odpowiedzi

+2 głosów
odpowiedź 12 marca 2017 przez draghan VIP (106,230 p.)
wybrane 12 marca 2017 przez Evelek
 
Najlepsza

Z dokumentacji wynika, że makra EXIT_* są zależne od implementacji, stąd wniosek że mogą istnieć platformy, dla których zerowy kod zwracany przez main niekoniecznie oznacza sukces. Zwracając jedno z takich makr masz większą pewność, co do rezultatu działania na jakichś egzotycznych platformach. W praktyce chyba nie spotkałem się z taką platformą, która zera nie traktowałaby jako EXIT_SUCCESS.

W C++ nie ma potrzeby jawnego pisania 'return 0' - przy wyjściu z main automatycznie jest zwracane zero.

Funkcja exit(int) kończy działanie programu z kodem, który podajesz jej jako argument. Niezalecana do użytku w C++, jako że nie wywołuje niektórych destruktorów.

exit() dla C: jak widać po przeczytaniu opisu, jest różnica, między return a exit. Przy exit() wywoływane są funkcje, zarejestrowane przez atexit() i... kilka innych rzeczy (patrz dokumentacja :).

komentarz 12 marca 2017 przez Evelek Nałogowiec (28,960 p.)
edycja 12 marca 2017 przez Evelek

Ok, wszystko wyjaśnione. Dziękuje draghan za linki. Kiedyś w sumie rozmawialiśmy na IRC o exit() i o tym, że w C++ nie wywołuje niektórych konstruktorów destruktorów - będę łatwiej kojarzył teraz.

komentarz 12 marca 2017 przez draghan VIP (106,230 p.)

Ach, to Ty... Nie zwróciłem uwagi, pewnie przez Twój NOWY avatar. ;) cppreference Twoim przewodnikiem zawsze i wszędzie. laugh

Ekhem: "destruktorów". ;)

komentarz 12 marca 2017 przez Evelek Nałogowiec (28,960 p.)

Ach to ja... I nie wiem czy mam to odbierać jako coś miłego czy niemiłego z Twojej strony. laugh

Avatar ma z pół roku. Też o niego pytałeś na IRC.wink

Ekhm... No tak. Destruktory miałem na myśli. My fail.

komentarz 12 marca 2017 przez draghan VIP (106,230 p.)
Nie wiem, skąd Ci coś niemiłego przyszło do głowy. A z avatarem to pamiętam, dlatego właśnie wspominam, bo to zabawne było.
+1 głos
odpowiedź 12 marca 2017 przez j23 Mędrzec (194,920 p.)
edycja 12 marca 2017 przez j23

Między return EXIT_SUCCESS; a return 0; różnicy nie ma, poza może tą, że wiadomo, co zwracasz.

Funkcja exit przerywa wykonanie programu, i używanie jej na końcu funkcji main jest pozbawione sensu, bo wystarczy dać return EXIT_SUCCESS; W C++ nie używać tej funkcji.

komentarz 12 marca 2017 przez niezalogowany

Z manuala:

       ┌──────────┬───────────────┬─────────────────────┐
       │Interface │ Attribute     │ Value               │
       ├──────────┼───────────────┼─────────────────────┤
       │exit()    │ Thread safety │ MT-Unsafe race:exit │
       └──────────┴───────────────┴─────────────────────┘
       The exit() function uses a global variable that is not protected, so it
       is not thread-safe.

 

komentarz 12 marca 2017 przez j23 Mędrzec (194,920 p.)

@shead, i co w związku z tym?

Podobne pytania

0 głosów
2 odpowiedzi 3,778 wizyt
pytanie zadane 6 lutego 2019 w C i C++ przez Thanat0s666 Nowicjusz (230 p.)
0 głosów
3 odpowiedzi 346 wizyt
pytanie zadane 19 listopada 2015 w C i C++ przez RoXoR Początkujący (280 p.)
0 głosów
2 odpowiedzi 229 wizyt
pytanie zadane 20 lutego 2021 w JavaScript przez Szyszka Gaduła (3,490 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...