zakończenie programu

Odpowiedz Nowy wątek
2011-07-27 15:33
piotr
0

Witam.
Jak zakończyć cały program w danym miejscu kodu?
bo chcę zrobić
if(coś tam){
tu ma być zakończenie programu
}
jak to zrobić?

Z góry dziękuje za pomoc.

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-07-27 15:34
0
if(cośtam)
  return 0

...

Pozostało 580 znaków

2011-07-27 15:55
0

@up a jak on to chce zrobić będą w funkcji innej niż main() to co? o_O

exit(0); //albo exit(1) jak chcesz pokazać ze to błędne zakończenie
zeby autor tematu pozniej sie nie pytal, to chcialem zaznaczyc ze funkcja exit znajduje sie w biblotece cstdlib (lub jak kto woli stdlib.h) - fasadin 2011-07-27 19:34

Pozostało 580 znaków

2011-07-27 16:00
Kumashiro
0
Shalom napisał(a)

a jak on to chce zrobić będą w funkcji innej niż main() to co?

To powinien poprawić swój kod ;)

Pokaż pozostałe 3 komentarze
Tak, są takie zasoby, które są otwarte do końca działania programu, np. plik z danymi wejściowymi. Nie rozumiem co w tym takiego nadzwyczajnego. - Kumashiro 2011-07-28 23:12
Ale jaki problem zarejestrować funkcję czyszczącą przez atexit()? o_O Tak to zwykle bywa że braki wiedzy uzupełnia się idiotycznymi pomysłami... - Shalom 2011-07-29 08:16
Kolego Shalom, przystopuj z tonem, zanim się zagalopujesz, bo nie mam ochoty uczestniczyć w pyskówkach. Doskonale sobie zdaję sprawę z istnienia atexit(), ale aby jej użyć trzeba deklarować zwalniane przez nią zasoby globalnie, co nie zawsze jest pożądane. - Kumashiro 2011-07-29 08:45
Rozumiem w takim razie że takie cuda jak chociażby Singletony są ci obce? Zresztą zgodnie z twoją logiką programy które są zgodne z OOP są niepoprawnie napisane (nie mówiąc o takich z GUI), bo zwykle ich main() polega jedynie na stworzeniu jakiegoś obiektu i wywołaniu na nim jakieś metody, a cała logika (w tym zamykanie programu i zwalnianie zasobów) są odpowiedzialnością tej klasy. Ale skoro dla ciebie jedyna alternatywa to zmienne globalne, to nie ma się co dziwić że masz awersję do atexit()... A co do pyskówek - wysnułeś bardzo śmiałą tezę więc teraz jakoś ją uargumentuj - Shalom 2011-07-29 08:55
Hmmm... No tak, ale Ty piszesz tu o C++. W C trzeba się pobawić. Ogólnie, funkcje nie powinny kończyć działania programu, jeśli nie są do tego specjalnie przeznaczone, a to powinnno być sygnalizowane np. odpowiednią nazwą ("logError" nie sugeruje, że nastąpi zakończenie programu). W takich wypadkach zgodzę się, że użycie exit() w funkcji jest uzasadnione. W pozostałych IMHO jest to złe i nie powinno się tego robić, bo programista używający takiej funkcji może chcieć coś zrobić po jej wykonaniu. A co do pyskówek - śmiała teza nie uprawnia do wycieczek personalnych ;) - Kumashiro 2011-07-29 10:07

Pozostało 580 znaków

2011-07-28 22:43
0

W przypadku jeżeli chcesz w przypadku nieodwracalnego błędu tylko wyjść z programu i wypisać błąd, to polecam makro assert (w assert.h/cassert). Jeżeli wyrażenie będące argumentem assert() będzie fałszywe to pokazuje Ci wtedy linię w kodzie źródłowym, i treść assercji. Znalazłem w jakieś książce sprytny sposób na komentowanie assercji (który bardzo mi odpowiada), tzn piszesz coś w stylu assert(ptr!=NULL && !"Tutaj nie powinno być NULLa"); Dzięki temu możesz od razu przy wyjściu dowiedzieć się dlaczego (string jest interpretowany jako prawda, więc !string jest fałszem, czyli drugi warunek nigdy się nie wykona). Assercji można dodawać ile się chce, ponieważ można zdefiniować (#define) NDEBUG, wtedy asercje nie będą kompilowane. Oczywiście tyczy się to wersji release, ale wtedy i tak takie błędy nie mogą występować.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0