return-Variable im __finally Block auswerten



  • Hallo zusammen,

    da ich mich mit C++ nicht so auskenne, beschäftigt mich seit einiger Zeit ein Problem.

    Ich möchte in einer Funktion den return-Wert im __finally-Block nachträglich auswerten.

    Hier nur ein kleines Beispiel:

    int fkt(int var1, int var2, ...)
    {
      TKlasse* kl(0);
    
      try
      {
        // Variablen überprüfen
        if ( var1<=0 ) 
          return 1;  // Error 1
    
        if ( var2<=0 )
          return 2;  // Error 2
    
        // ansonsten
        // benötigte Objekte initialisieren
        kl = new TKlasse();
    
        tue was nötig ist
        return 0; // alles Ok
      }
      __finally
      {
        if ( return-Wert > 0 )
          ShowMessage("Fehler aufgetreten");
        //
        // Speicher freigeben...
        if (kl)
          delete kl;
      }
    }
    

    Habt ihr eine Idee, wie ich den return-Wert abfragen kann?



  • Nur zur Info...

    __finally gehört nicht zum C++ ISO Standard, sondern ist eine Erweiterung von Microsoft: https://msdn.microsoft.com/en-us/library/swezty51.aspx

    Das zugehörige "try" ist allerdings __try und nicht try . Für das Exception-Handling von Standard C++ gibt es try / catch - ein "finally" gibt es so nicht, allerdings wird RAII eingesetzt um denselben Effekt zu erzielen.



  • Und als Antwort auf deine eigentliche Frage:

    Einfach den "Return-Wert" ausserhalb des __try / __finally Blocks definieren.

    int fkt(int var1, int var2, ...)
    {
      int result = 0;
    
      __try
      {
         result = /* Berechnung etc. */;
      }
      __finally
      {
         // hier result benutzen...
    
         return result;
      }
    }
    

    In C++ macht man das typischerweise nicht, sondern benutzt RAII um Resourcen sicher freizugeben. Zumal, wie erwähnt, __try / __finally nur für Microsoft-Compiler verfügbar ist.


Anmelden zum Antworten