Warnungen mit der Syntax e abschalten oder verhindern



  • Hi @ All!

    Bei einem meiner Programme die gerade schreibe kommt wenn ich mit try{} und
    catch (FormatException ^e) {} eine Warnung die irgendetwas mit der Sysntax e zu tun hat.

    Kann man das irgendwie verhindern oder abschalten?

    Gruß

    The Smart



  • Irgendeine Warnung mit der "Syntax e" ist nicht wirklich berauschend als Information.

    Ich rate mal, das es sich bei der Warnung um ein "Variable nicht verwendet" handelt. Lass das e weg, wenn Du es nicht verwendest und die Warnung erledigt sich. Für Details drücke mal F1 bei der Warnung oder gib konkrete Meldungen an.



  • Warscheinlich ist es eine Warnung, weil die Variable e nicht weiter verwendet wird.

    Ich definere deshalb im catch-Block eine Dummy-Variable vom Typ String:

    String ^sMessages = e->Message;
    

    und die Warning ist verschwunden.



  • Du ersetzt also eine unbenutzte Variable durch eine neue unbenutzte Variable ^^

    Denk noch mal über den Sinn des Vorgehens nach.



  • also für alle dies genau haben wollen:

    warning C4101: 'e': Unreferenzierte lokale Variable

    @taraneas : ich versuchs ma und sag dann obs geklappt hat

    Gruß

    The Smart



  • Hast Du die Lösung von Knuddelbaer nicht gelesen?
    IMO ist der Vorschlag von taraneas keine Lösung, sonder einfach ein Hack.

    Simon



  • Lass die Warnung stehen. Berrechtigt ist sie ja. Macht aber auch nichts kaputt.



  • @simon.gysi

    Das was Knuddlbaer geschrieben hat bringt mich auch nicht weiter da die catch funktion eine fehlfunktion abfangen soll und das machts nicht ohne FormatException ^e .



  • Man man man....
    [wer mich kennt möge sich jetzt die paar Zeilen denken die hier normal stehen]

    try
    {
      // blösinn
    }
    catch (Exception^)
    {
    }
    


  • War mir auch klar, dass das keinen Mehrwert hat, aber es funktioniert.

    Leider kam ich selber nicht auf die Idee, einfach die Definition wegzulassen. Aber dank deines Hinweises kann ich es in Zukunft besser lösen.



  • habs jetzt ma ohne des e ausprobiert und es hat funktioniert! 😉

    Sorry Knuddlbaer , aber ich hab des echt net gewusst das man das e einfach weglassen darf, denn in meinem Visual C++ buch von Dirk Luis steht es nur mit dem e drinnen.

    Gruß

    The Smart

    P.S: Thema kann geschlossen werden!

    Danke an alle die hier mitgeholfen haben,
    besonderer Danke gilt hierbei Knuddlbaer!



  • Hallo the Smart,

    besonders viel Sinn macht das aber nicht was Du da schreibst und was Dir da vorgeschlagen wird.
    Wann benutzt man einen try und catch Block?
    Wenn man Fehler abfangen möchte.
    Wenn ich mir sicher bin, dass in diesem Codeabschnitt keinen Fehler auflaufen kann, lasse ich den try-catch Block einfach weg.
    Aber ich lass auf sicher nicht die Meldung in den catch-Block laufen ohne sie zu behandeln.

    Guck mal hier...

    http://www.rb-softarticle.com/try-catch Block.aspx

    try
    {
       //Anweisung
    }
    
    catch(Execption1 e)
    {
       MessageBox::Show(e->Message);
    }
    

    Gruß, Doug_HH



  • besonders viel Sinn macht das aber nicht was Du da schreibst und was Dir da vorgeschlagen wird.

    Aber ich lass auf sicher nicht die Meldung in den catch-Block laufen ohne sie zu behandeln.

    Bei dem Satz muss man raten. Ich rate mal, dass Du meinst, das man den Catchblock weg lassen soll. Das hat niemand behauptet.

    Meinst Du, das man die e->Message immer ausgeben ("behandeln") soll, steht Dir in Sachen Exeptionhandling noch ein wenig Arbeit bevor.

    Und Dein hier geposteter Beispielcode ist falsch, da fehlt ein ^



  • Hallo

    Doug_HH schrieb:

    Wenn ich mir sicher bin, dass in diesem Codeabschnitt keinen Fehler auflaufen kann, lasse ich den try-catch Block einfach weg.

    Das würde ich so nicht unterschreiben...

    chrische



  • noch einfacher man schreibt

    try{
        //Alles mögliche
    }
    catch(...){
        //allgemeine meldung
    }
    


  • aber wenn die exception "FormatException" nicht in den allgemeinen block fliegen soll ??

    try
    {
        // irgendwas
    }
    catch(FormatException^)
    {
        // erstmal nichts machen
    }
    catch(NullReferenceException^ ex)
    {
        // keine referenz - message ex ausgeben
    }
    catch(...)
    {
        // nicht abgefangene errors behandeln
    }
    


  • chrische5 schrieb:

    Das würde ich so nicht unterschreiben...

    Wie meinst Du das? Wie Unterschreiben?

    Ich meine so einen Codeabschnitt

    try
    {
    	checkBox1->Checked = true;
    }
    
    catch(Exception^ ex)
    {
    	MessageBox::Show(ex->Message);
    }
    

    Würdes Du das Unterschreiben?! 🙄 Würde das Sinn machen?

    @Knuddlbaer: Jo hatte das ^ vergessen, hatte das eben so schnell im Editor geschrieben.

    Gruß



  • Hallo

    Naja mit dem sicher sein, ist das so eine Sache. Es heißt ja nicht umsonst Ausnahme. Aber du hast natürlich recht, dass dein Beispiel wirklich von einer anderen Welt ist. Ich wollte nur darauf hindeuten, dass man es nicht zu oft weglassen sollte.

    chrische



  • try
    {
    	checkBox1->Checked = true;
    }
    
    catch(Exception^ ex)
    {
    	MessageBox::Show(ex->Message);
    }
    

    An der Stelle kann z.B. eine NullReferenceException oder eine ObectDisposedException, und eine Exception wegen Threadübergreifenden Vorgang fliegen. Es gibt durchaus Situationen, in dem dieser Quellcode Sinn macht.



  • Hallo

    Da war ich wohl zu früh 😃 Ich habe es aber noch nie so geschrieben.

    chrische


Anmelden zum Antworten