Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Unerwartete Exceptions zum Schluss abfangen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.07.2007, 15:00 Uhr
~tobb87
Gast


Hi,

gitb es eine Methode ungefangen Exceptions so abzufangen, dass man wenigstens noch sowas wie "Sorry, unknown error" auf der Konsole ausgeben kann...

Natürlich kann ich meine komplette main funktion in try-catch-Blöcke setzen

Code:
int main()
{
    try
    {
        //Die Main Funktion
    }
    catch(...)
    {
        std::cerr << "Sorry, unknown error..." << std::endl;
    }
}



Aber irgendwie sieht das nicht sehr schön aus...
Gibts andere Methoden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.07.2007, 16:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,

normalerweise leitet man die exceptions von std::exception ab,

dann kann man z.b sowas machen:


C++:
int main()
{
    try
    {
        //Die Main Funktion
    }
    catch(std::exception &e)
    {
        std::cerr << "Sorry, unspecific error occured: " << e->what() << std::endl;
    }
    catch(...)
    {
        std::cerr << "Sorry, unknown error..." << std::endl;
    }
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.07.2007, 16:59 Uhr
~tobb87
Gast


Es ging mir eher um den Stil...

Wenn das guter Stil ist, dann müsste ja eigentlich jedes C++ Programm die komplette main Funktion in try-catch-Blöcke setzen um unerwartete Exceptions abzufangen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.07.2007, 17:50 Uhr
Braunstein



Hallo,

Ich weiß nicht ob das guter Stil ist, gesehen habe ich sowas aber schon oft. Auch bei GUI-Anwendungen. Mir fällt auch nichts weiter ein wie man sowas sonst regeln kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.07.2007, 17:53 Uhr
mischa
Fragender


Naja man muss ja nicht übertreiben. Exceptions werden ja nur dann benutzt um die Fehlerbehandlung von dem eigentlichem Programm zu entkopeln aber wenn man das nicht braucht oder die möglichen Fehler simple sind kann man das auch auf die traditionele Weise lösen.
edit
Exceptions sind "guter Stil" aber nur dann wenn man sie auch braucht. Exceptions werden in jedem modernem größerem c++ Programm benutzt und ist auch gut so.
--
Latein Unterricht ist die spätere Rache der Römer an den Germanen.

Dieser Post wurde am 27.07.2007 um 17:55 Uhr von mischa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.07.2007, 20:27 Uhr
~tobb87
Gast


Ich habe das ganze nun mittels set_terminate gelöst... diese Funktion wird aufgerufen, wenn ungefangen Exceptions das Programm beenden...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.07.2007, 21:24 Uhr
0xdeadbeef
Gott
(Operator)


Ich mag den set_terminate-Mechanismus nicht besonders. Du verlässt dich drauf, dass das nicht irgendwo anders im Code wieder verändert wird - das kann nach hinten losgehen, gerade wenn du Bibliotheken Dritter benutzt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.07.2007, 23:20 Uhr
~tobb87
Gast


Das stimmt auch wieder...

Wie machst du es denn?
Ich finde diesen riesen try-Block in main einfach hässlich... auserdem werden Destruktoren von globalen oder in main lokalen Objekten nicht davon beachtet...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.07.2007, 23:47 Uhr
0xdeadbeef
Gott
(Operator)


Natürlich werden Destruktoren in try-catch-Blöcken beachtet.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.07.2007, 23:52 Uhr
~tobb87
Gast



Code:
Type Objekt;

int main()
{
    try
    {
        //main funktion
    }
    catch(...)
    {
    }
}



Wenn bei der Kosntruirung von Objekt eine Exception geworfen wird, wird sie nicht abgefangen... das meine ich, und das verhindert set_terminate...
Wie will man das sonst lösen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: