PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm bei Fehler komplett verlassen


Gast
2006-01-14, 12:00:19
Mahlzeit!

Wie kann ich bei C++ komplett aus dem Programm (kontrolliert) aussteigen (z.B. wegen sehr bösem Fehler)?
Wenn ich in einem Block einen Fehler feststelle, kann ich diesen mit return verlassen. Aber diese Durchhangelei durch die übergeordneten Blöcke will ich vermeiden.

Brillenschlange92
2006-01-14, 12:03:01
[gelöscht]

mithrandir
2006-01-14, 14:53:14
Das müsste die Funktion "exit" sein (stdlib.h).

Coda
2006-01-14, 14:58:13
Wua. Nein! exit ist böse bei nem C++ Programm.

Schmeiß ne Exception!

Brillenschlange92
2006-01-14, 17:57:14
[gelöscht]

Coda
2006-01-14, 18:08:35
Brillenschlange, es geht um C++. STFU :rolleyes:

ScottManDeath
2006-01-15, 00:30:22
Sinnfreies Beispiel für Exceptions:



class to_far_exception
{
};

void deep_down(unsigned int i)
{
if ( 0 == i)
thow to_far_exception();
else
deep_down( i - 1);
}

int main (int, char**)
{
try
{
deep_down(1337);

}
catch(to_far_expcetion& e)
{
printf("went to far...\n");
exit(0);
}
}

Brillenschlange92
2006-01-15, 11:59:38
[gelöscht]

Coda
2006-01-15, 12:17:41
Der Topic-Poster hat explizit nach C++ gefragt.

Gast
2006-01-15, 15:19:24
@ScottManDeath: exit muss weg. Wie es der englisch sprechende sagen würde: Consider this:

struct MustBeDestructedCorrectInAnyCase
{
~MustBeDestructedCorrectInAnyCase() {
std::cout << "Okay, alles nach Plan :)\n";
}
};

void iWillThrow()
{
throw 0;
}

int main()
{
MustBeDestructedCorrectInAnyCase obj;
try {
iWillThrow();
} catch(...) {
exit(0); // obj wird nicht zerstört :o
}
}

ScottManDeath
2006-01-15, 23:29:41
Stimmt, wenn man den catch Block in der main funktion hat, dann braucht man das exit nicht, bzw es wäre kontraproduktiv ;)

"return" wäre das beste in diesem Fall.

zeckensack
2006-01-16, 00:37:55
Und so richtig witzig wird's, wenn der Destruktor eine Exception wirft =)

Btw, "destroyed", nicht "destructed".

ScottManDeath
2006-01-16, 00:50:10
Und so richtig witzig wird's, wenn der Destruktor eine Exception wirft =)



Das ist bad practise und auch sinnlos. Denn wenn das Objekt zerstört wird, kann man nicht mehr sinnvoll auf die Exception des Destruktors reagieren, da das Objekt danach nicht mehr existiert. ;)

Ist in den Herb Sutter Büchern {Exceptional C++, More Exceptional C++, Exceptional C++ Style} (http://www.gotw.ca/publications/index.htm) genauer erklärt.