(C++) try & catch



  • hi,
    ich habe gehöert das in dem neuen c++ **standard try und catch unterstützt werden soll.
    stimmt das?
    wenn ja kann man es auch in dem mingw3.2 verwenden?
    wenn ja, kann mir viwllwicht jemand erklären wie man damit arbeitet?
    danke

    mfg
    unwissender**



  • Arbeiten tut man damit so:

    // ...
    try
    {
        if(!TuWas())
        {
            throw TEXT("TuWas() fehlgeschlagen!");
            MessageBox(0,TEXT("Das hier wird nicht ausgeben..."),TEXT("..."),MB_OK);
        }
    
        if(!TuWasAnderes())
        {
            throw TEXT("TuWasAnderes() fehlgeschlagen!");
        }
    }
    catch(LPCTSTR lpError)
    {
        MessageBox(0,lpError,TEXT("Fehler!!"),MB_OK | MB_ICONSTOP);
        return 1;
    }
    // ...
    

    cya 🙂



  • ok, danke, soweit hab ichs jetzt vwerstanden.
    aber muss man catch(LPCTSTR lpError) immer benutzen?..oder gibt es auch andere fehler die man abfangen kann?



  • Im Prinzip ist das try/catch wie bei Java (daher kennst du es sicherlich?) und man kann sowohl vorhandene Exception-Typen als auch eigene Typen werfen und abfangen. Die STL macht auch davon regen gebrauch und die MFC wirft auch an kritischen Stellen einige Exceptions!

    catch(...) z.B. fängt ALLE Exception-Typen ab.

    Im Gegensatz zu Java ist man jedoch nicht dazu gezwungen Exceptions abzufangen, es basiert auf freiwilliger Basis des Programmierers. Ist wohl auch ein Grund, weshalb try/catch unter C++ bei den meisten unbekannt ist.

    [ Dieser Beitrag wurde am 05.01.2003 um 23:24 Uhr von Artchi editiert. ]



  • Die STL macht auch davon regen gebrauch

    Tatsächlich? Wo denn? Mir ist eigentlich nur eine Stelle in der STL bekannt an der eine Exception erzeugt wird.

    Im Gegensatz zu Java ist man jedoch nicht dazu gezwungen Exceptions abzufangen, es basiert auf freiwilliger Basis des Programmierers

    Das ist sehr unglücklich formuliert. Richtig ist, dass in Java im Gegensatz zu C++ bei gewissen Exceptions bereits zur Compilezeit geprüft wird ob eine Exception auch gefangen wird. Ob das aber ein Vorteil ist ist mittlerweile fraglich.

    In C++ ist Exceptionshandling eine Laufzeitgeschichte. Ignorieren kann man Exceptions aber auch in C++ nicht. Nicht behandelte Exceptions führen zum Programmabbruch.

    Ist wohl auch ein Grund, weshalb try/catch unter C++ bei den meisten unbekannt ist.

    Mal ehrlich. Wer Exceptionhandling nicht kennt darf sich wohl kaum C++ Programmierer nennen. Zwar gibt es einige Gebiete in denen auf Exceptions verzichtet wird, aber try-catch und co. kennt *jeder* C++ Programmierer.

    ich habe gehöert das in dem neuen c++ standard try und catch unterstützt werden soll.

    Exceptionhandling (über try-catch) gibt es schon seit über 8 Jahren in C++. Und standardisiert ist es seit 1998. Du kannst aber sicher sein, dass auch der neue Standard Exceptionhandling unterstützen wird 😉

    Arbeiten tut man damit so:
    // ...
    try
    {
    if(!TuWas())
    {
    throw TEXT("TuWas() fehlgeschlagen!");
    MessageBox(0,TEXT("Das hier wird nicht ausgeben..."),TEXT("..."),MB_OK);
    }

    if(!TuWasAnderes())
    {
    throw TEXT("TuWasAnderes() fehlgeschlagen!");
    }
    }
    catch(LPCTSTR lpError)
    {
    MessageBox(0,lpError,TEXT("Fehler!!"),MB_OK | MB_ICONSTOP);
    return 1;
    }
    // ...

    Das jemand so damit arbeittet ist hoffentlich eher die Ausnahme als die Regel. Exceptions sind doch nicht primär als goto-Ersatz gedacht. Und Strings zu schmeißen widerspricht auch jeder stark typisierten Sprache.



  • Exceptions sind schön und gut, aber bedenkt die Probleme, die Exceptions verursachen können (ja ich Rede von Exceptionsicherheit ;)), ein sehr gutes Buch zu dem Thema ist "Exceptional C++" IMHO (geht aber auch um andere Themen, trotz des Namens ;))

    ab in das C++ Forum damit


Anmelden zum Antworten