Was genau bringen exceptions?



  • ceplusplus schrieb:

    Hey!
    Der code wird doch viel länger, wenn man exceptions verwendet...

    nö, er wird viel kürzer!

    HWND myCreateWindow(
    HWND CreateWindow(LPCTSTR a,LPCTSTR b,DWORD c,int d,int e,int f,int g,HWND h,HMENU i,HINSTANCE j,LPVOID k)
    {
       HWND hWnd = CreateWindow(a,b,c,d,e,f,g,h,i,j,k);
       if(!hWnd)
          throw ErrorMessage("Could not create drawing window", "001");
       return hWnd;
    }
    

    und ab heute verwendest du nur noch myCreateWindow. und alle anderen winapi-funktionen verpackst du auch mit einem exeptionwerfenden wrapper.

    Verstehe ich die exceptions überhaupt richtig?

    nö. wer in c++ exit(0) aufruft, beschwört dicke probleme herauf. fang lieber in der main() die exceptions.



  • ceplusplus schrieb:

    Hey!

    Der code wird doch viel länger, wenn man exceptions verwendet...

    #ifndef INCLUDED_ERRORMESSAGE
    #define INCLUDED_ERRORMESSAGE
    
    #include <string>
    #include <windows.h>
    
    class ErrorMessage
    {
    	std::string errorMessage;
    	std::string errorId;
    public:
    	ErrorMessage(std::string, std::string);
    	~ErrorMessage();
    
    	std::string& getErrorMessage();
    	std::string& getErrorId();
    };
    
    #endif // INCLUDED_ERRORMESSAGE
    
    ...
    
    HWND hWnd = CreateWindow("Main", "Blubbor", WS_POPUP, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
    
    	try
    	{
    		if(!hWnd)
    			throw ErrorMessage("Could not create drawing window", "001");
    	}
    	catch(ErrorMessage& errorMessage)
    	{
    		MessageBox(NULL, errorMessage.getErrorMessage().c_str(), ("Error ID: " + errorMessage.getErrorId()).c_str(), MB_OK);
    		exit(0);
    	}
    
    ...
    

    Verstehe ich die exceptions überhaupt richtig? Also mache ich es richtig/effektiv?

    if(!hWnd)
    MessageBox(NULL, "....

    wär doch viel einfacher?

    MfG

    Naja, da hast Du ja auch eine exception verwendet, wo es wenig sinnvoll ist.
    Stell die Frage nochmal mit:

    class A {}
    bool f1(A& a);
    bool f2(A& a);
    bool f3(A& a);
    bool f4(A& a);
    bool f5(A& a);
    bool f6(A& a);
    bool f7(A& a);
    bool f8(A& a);
    bool f9(A& a);
    bool f10(A& a);
    
    int main() {
       A a;
       try {
    	f1(A& a);
    	f2(A& a);
    	f3(A& a);
    	f4(A& a);
    	f5(A& a);
    	f6(A& a);
    	f7(A& a);
    	f8(A& a);
    	f9(A& a);
    	f10(A& a);
       }
       catch(...) {
          // do something
       }
       // Hier soll es weitergehen mit einem a, das nur erfolgreiche f_() durchlaufen hat !
       return 0;
    }
    

    Oder wie Du Fehlersituationen in Konstruktoren abhandeln willst, oder wie Du als Programmierer einer Funktion sicherstellen willst, dass Dein Aufrufer auch sicher die Fehlersituation bemerkt, oder ....

    Gruß,

    Simon2.



  • darthdespotism schrieb:

    Und was ist der Unterschied ob ich in Java in main() alle Exceptions fange und dann einfach das Programm beende oder C++ das gleich implizit machen zu lassen?

    Es ist auch nicht der Sinn von Exceptions, alles in main zu fangen. Wenn man die Exception an der richtigen stelle fängt, dann kann man auch ne sinnvolle Fehlerbehandlung machen und nicht nur im catch(...) "sagen irgendwas war falsch, tschüs".

    Java hat für meinen Geschmak zu viel Zwang. z.B. bekomme ich so etwas nicht kompiliert:

    public int abc()
    {
        int i = 5;
    
        //...
    
        if(i = 5)
        {
            return i;
        }
        else
        {
            return -i;
        }
    }
    

    Natürlich, weil eine zuweisung keinen boolschen wert liefert.

    Artchi schrieb:

    Ford Perfect schrieb:

    In C++ werden exceptions doch nicht richtig unterstützt, wenn ich in Java ne exception werf, dann muss ich sie auch fangen, sonst gibts nen compileerror, wenns keine runtimeexception ist.

    Stimmt doch garnicht! Java-Exceptions die von RuntimeException abgeleitet sind, müssen nicht abgefangen werden!

    Lern lesen!

    Manche Java-Exceptions wie OutOfMemory kann man sogar garnicht abfangen. Also, bitte keine Halbwahrheiten erzählen.

    Falsch! Es heist ja schon OutOfMemoryError und nen Error kann man auch fangen (auch wenns selten sinnvoll ist), schau dir mal die vererbungshierarchie an.



  • Ein Tipp der mir geholfen hat.

    Wann immer man ein Sprachkonstrukt nicht versteht und es unsinnig erscheint sollte man nciht damit anfangen den Fehler bei dem Sprachkonstrukt (in dem fall exceptions) zu suchen sondern erstmal bei sich selber. In 90% der Fälle liegt es lediglich an der eigenen Unfähigkeit etwas Neues zu begreifen, wogegen man aber etwas machen kann.

    Das klappt aber nur wenn man auch bereit ist zu akzeptieren das es an einem selber liegt, wie in diesem Fall mehr als deutlich.



  • ich les die erste seite und freu mich zu antworten, aber for perfect hat schon alles gesagt was ich sagen wollte 😞 👍



  • Ganz unabhängig vom Inhalt (zu dem ich nichts zu sagen habe)

    Ford Perfect schrieb:

    ...
    Lern lesen!
    ...

    🙄 🙄 🙄
    MUSS man wirklich derart unfreundlich werden ? Stell' Dir einfach mal vor, der Knabe säße Dir gegenüber .... hättest Du ihm das auch so an den Kopf geknallt ?
    Solch ein Verhalten macht das Forumsklima kaputt und hilft keinem weiter ....

    Gruß,

    Simon2.



  • @Simon2:

    Äh. Und zu antworten obwohl man nichtmal vollständig gelesen und/oder verstanden hat was jmd. anderer geschrieben hat ist natürlich garnicht unfreundlich sondern vollkommen OK oder wie?

    Klar *kann* man auf die "Unfreundlichkeit" eines anderen freundlich reagieren, kann ich nix schlechtes daran finden, aber erwarten tu' ich das nicht.



  • hustbaer! Sorry, aber das ist ja wohl nicht korrekt, das ein nicht registrierter anonymer Assi mir sagt, ich das ich lesen lernen soll? 😡 Die Unregs sollen mal schön den Ball flach halten. Ich lasse mich lieber von einem gestandenen Forenmitglied anmachen, als von jemanden, der so feige ist, nur zu posten, wenn er nicht seine Person kenntlich macht. Aber ich habe eh nicht auf seine Reaktion reagiert, weil er mir am Arsch vorbei geht. Ganz davon abgesehen, das ich sowieso Recht habe. :p



  • Artchi schrieb:

    hustbaer! Sorry, aber das ist ja wohl nicht korrekt, das ein nicht registrierter anonymer Assi mir sagt, ich das ich lesen lernen soll? 😡 Die Unregs sollen mal schön den Ball flach halten.

    Dass Du denjenigen dann als Assi bezeichnest ist hingegen natürlich völlig in Ordnung. 👍



  • Ja und? Habe ich doch schon gesagt: unbekannt, eine Nummer, mehr nicht. Kenne nicht mal seinen Namen. Hätte auch ein Bot sein können. Was erwartet man denn? Das ich mich bei dem anonymen unbekannten feigen Unreg entschuldige? 😮 Wir reden hier nicht über Personen die mir/uns bekannt sind. (die dann "menschlich" sind und ich entsprechend respektvoller behandel) Aber ist eh offtopic...



  • Es gibt überhaupt keinen Grund, warum wir vier (Artchi, hustbaer und Jester - alles "renommierte Forumsteilnehmer", die bislang Fachwissen und soziale Kompetenz bewiesen haben) uns hier gegenseitig an die Gurgel gehen sollten ... aber
    genau diese Rumpamperei ist das Ergebnis davon, dass Leute (und es stimmt: Fast immer Leute, die sich hinter "unregistriert" verstecken) hier den "Umgangston versauen".
    Und ich kann mich nicht des Eindrucks erwehren, dass sich da jetzt jemand die Hände reibt und diebisch freut, dass wir ihm mit unserer Diskussion mehr Aufmerksamkeit schenken, als er verdient hat.

    Gruß,

    Simon2.

    P.S.: Ich habe mich zwar nicht inhaltlich an dem "Java-Subthema" beteiligt, aber durchaus mitgelesen und nichts in Artchies Verhalten gefunden, was diese "Antwort" gerechtfertigt hätte - außerdem ist das genau leider die Strategie, die ich hier schon öfter von Unregistrierten erlebt habe: Ist jemanden in einem speziellen Punkt anderer Meinung, wird ihm sofort ein IQ von Brot zugeschrieben.
    Ich habe eine Fußnote im Standard übersehen => Ich bin unfähig zu lesen;
    ich habe ein Konstrukt mißverstanden => Ich bin offensichtlich ein Totalversager;
    ich setze lieber Technik A statt Technik B ein => Ich würde bei der Kinderkrippenaufnahmeprüfung für Schimpansen durchfallen. .... 🙄
    das nervt und macht das Forum kaputt - und ich glaube, das soll es auch. Und weil ich das nicht möchte, sage ich etwas dagegen => Ja, ich finde das OK.



  • Artchi schrieb:

    Sorry, aber das ist ja wohl nicht korrekt, das ein nicht registrierter anonymer Assi mir sagt, ich das ich lesen lernen soll?

    Doch, ist es absolut. Wofür hältst du dich?
    Und mit den Ausdruck "Assi" hast du dich sowieso disqualifiziert.



  • Simon2 schrieb:

    Und ich kann mich nicht des Eindrucks erwehren, dass sich da jetzt jemand die Hände reibt und diebisch freut, dass wir ihm mit unserer Diskussion mehr Aufmerksamkeit schenken, als er verdient hat.

    Es ist immer leicht jemandem Trollerei zu unterstellen, wenn er eine unpopuläre Meinung vertritt oder euch nicht den Respekt entgegenbringt, den ihr irrtümlicherweise glaubt euch verdient zu haben.



  • Ich bin zwar hier nicht zuständig, aber trotzdem: Könntet ihr bitte aufhören, euch gegenseitig Beleidigungen an den Kopf zu werfen? (und das gilt für ALLE Anwesenden)

    @"assi": Das hat nichts mit "Respekt verdienen" zu tun. Es gibt im Internet gewisse Umgangsformen (auch als "Netikette" bezeichnet), an die man sich schon halten sollte. Und dazu gehört auch, daß man zumindest halbwegs konstruktiv mit seinen Mitmenschen redet (und gerade wenn sich jemand hinter seiner Anonymität versteckt, wird er besonders kritisch beobachtet).
    Sieh es doch mal von der Seite: Artchi oder Simon sind recht lange hier unterwegs gewesen, da weiß man langsam, wie sie "ticken". Von dir wissen wir nur, daß du dich "anonymer Assi" oder "Ford Perfect" (ich weiß noch nicht einmal, ob sich dahinter der selbe Mensch verbirgt) nennst und hier mehr oder weniger sinnlose Kommentare abläßt.

    @Simon: Imho wäre Artchi derjenige gewesen, der auf diese Bemerkung reagieren müsste 😉



  • Artchi schrieb:

    Wir reden hier nicht über Personen die mir/uns bekannt sind. (die dann "menschlich" sind und ich entsprechend respektvoller behandel)

    Behandelst Du Leute die Du nicht kennst also grundsätzlich respektlos? "Wenn ich jemanden nicht kenne ist er nicht richtig menschlich" klingt für mich ein bißchen nach Autismus.



  • Artchi schrieb:

    Ford Perfect schrieb:

    In C++ werden exceptions doch nicht richtig unterstützt, wenn ich in Java ne exception werf, dann muss ich sie auch fangen, sonst gibts nen compileerror, wenns keine runtimeexception ist.

    Stimmt doch garnicht! Java-Exceptions die von RuntimeException abgeleitet sind, müssen nicht abgefangen werden! Manche Java-Exceptions wie OutOfMemory kann man sogar garnicht abfangen. Also, bitte keine Halbwahrheiten erzählen.

    Naja, Ford Perfect schreibt: Man muß alles fangen, es sei denn es erbt von Runtime... Und Artchi darauf: Stimmt ja garnicht! Wenn's von Runtime... erbt muß man nicht fangen!

    Da kann einem schon mal der Gedanke kommen, dass jemand nicht richtig gelesen hat, oder? -- Auch wenn der nächste Satz möglicherweise ein guter Einwand ist (keine Ahnung, interessiert mich auch nicht wirklich).



  • Mmmmmhhhmmmmm ok, jetzt weiß ich auch mal, was Exceptions bringen. 🤡 👍



  • CStoll schrieb:

    Es gibt im Internet gewisse Umgangsformen (auch als "Netikette" bezeichnet), an die man sich schon halten sollte.

    Ein rauer Umgangston ist doch ganz normal, Netiquette hin oder her. "Lern lesen!" ist ja nun beileibe keine ehrenrührige Beleidigung. Er hat nicht richtig gelesen oder es nicht verstanden, so what? Sich als Reaktion auf eine Zugehörigkeit zu einem vermeintlich elitären Kreis zu berufen und sich so von der Kritik freizusprechen (und bei der Gelegenheit noch schnell eine fette persönliche Beleidigung unterzubringen) ist ja wohl absolut unangebracht, unreif und lächerlich.

    Von dir wissen wir nur, daß du dich "anonymer Assi" oder "Ford Perfect" (ich weiß noch nicht einmal, ob sich dahinter der selbe Mensch verbirgt) nennst und hier mehr oder weniger sinnlose Kommentare abläßt.

    Ich bin nicht Ford Perfect. Und wenn ich es wäre, würde ich mich Ford Prefect nennen.



  • anonymer assi schrieb:

    CStoll schrieb:

    Es gibt im Internet gewisse Umgangsformen (auch als "Netikette" bezeichnet), an die man sich schon halten sollte.

    Ein rauer Umgangston ist doch ganz normal, Netiquette hin oder her. "Lern lesen!" ist ja nun beileibe keine ehrenrührige Beleidigung. Er hat nicht richtig gelesen oder es nicht verstanden, so what? Sich als Reaktion auf eine Zugehörigkeit zu einem vermeintlich elitären Kreis zu berufen und sich so von der Kritik freizusprechen (und bei der Gelegenheit noch schnell eine fette persönliche Beleidigung unterzubringen) ist ja wohl absolut unangebracht, unreif und lächerlich.

    Ich kenne mich mit Java-Gegebenheiten nicht genug aus, um den Inhalt der Bemerkungen zu beurteilen. Aber Ford's Aussage war alles andere als klar formuliert und wurde (imho) von Artchi genauer erläutert.
    (obwohl es mich mal interessieren würde, warum man in Java nicht auf OutOfMemory-Fehler reagieren kann)

    Die Bemerkung "Lern lesen!" an sich ist noch keine Beleidigung, aber zumindest in der Form grob unhöflich. Und meine Eröffnungsaussage galt im übrigen in alle Richtungen (das schließt auch Artchi und dich mit ein).

    Von dir wissen wir nur, daß du dich "anonymer Assi" oder "Ford Perfect" (ich weiß noch nicht einmal, ob sich dahinter der selbe Mensch verbirgt) nennst und hier mehr oder weniger sinnlose Kommentare abläßt.

    Ich bin nicht Ford Perfect. Und wenn ich es wäre, würde ich mich Ford Prefect nennen.

    Was hast du dann für einen Grund, dich hier einzumischen? Die Angelegenheit geht nur Ford Perfect und Artchi etwas an, also sollten die beiden das unter sich klären.



  • anonymer assi schrieb:

    Simon2 schrieb:

    Und ich kann mich nicht des Eindrucks erwehren, dass sich da jetzt jemand die Hände reibt und diebisch freut, dass wir ihm mit unserer Diskussion mehr Aufmerksamkeit schenken, als er verdient hat.

    Es ist immer leicht jemandem Trollerei zu unterstellen, wenn er eine unpopuläre Meinung vertritt oder euch nicht den Respekt entgegenbringt, den ihr irrtümlicherweise glaubt euch verdient zu haben.

    Es ist immer leichter, sich als armes unterdrücktes Opfer einer Verschwörung zu definieren, als sich und seine Ansichten einer ernsthaften Diskussion zu stellen.
    Fast noch einfacher ist es, sich in ironisierte Provokationen zuflüchten ...:p

    Gruß,

    Simon2.


Anmelden zum Antworten