Fehlerbehandlung im C-Style

In vielen Sprachen verwendet man den Rückgabetyp einer Funktion um festzstellen ob es einen Fehler gab. Erweiterte Fehlerinformationen sind dann woanders abrufbar. In C bedeutet ein Rückgabewert von 0 meistens einen Fehler. Erweiterte Informationen sind in der globalen Variablen errno enthalten.

Dies hat allerdings einen großen Nachteil: betrachten wir eine Funktion die eine Zahl durch eine andere dividiert und das Ergebnis zurück gibt.

    double divide(int divident, int divisor)
    {
      if(divisor==0)
      {
        //was jetzt?
        return 0;
      }
      return static_cast<double>(divident)/divisor;
    }

Was machen wir wenn der Divisor 0 ist? Die Division muss fehlschlagen - aber welcher Wert ist ungültig? 0 kann auch bei einer ordentlichen Division rauskommen. Eine Möglichkeit wäre das Ergebnis der Division in eine Variabe zu schreiben, die per Referenz übergeben wurde.

    bool divide(int divident, int divisor, int& result)
    {
      if(divisor==0)
      {
        return false;
      }
      result=static_cast<double>(divident)/divisor;
      return true;
    }

Der Nachteil dieser Methode ist offensichtlich: die Funktion divide lässt sich nicht mehr so schön verwenden. Auch ist ein cout<<divide(2,3); nicht mehr möglich.

top