Error Handling unter C++

Gast #2132714
Lesenswert?

Hallo,

Mich würden gängige Wege zur Fehlerbehandlung interessieren.

Beispiel: Ich hätte die Klasse interface welche mit der seriellen 
Schnittstelle kommuniziert. Für das senden von Informationen gäbe es die 
Funktion send welche die C-funktion für das senden aufruft. Die 
c-funktion gibt die anzahl der gesendeten bytes zurück.

Wenn jetzt aber nicht alle bytes gesendet wurden ist dies eigentlich ein 
Fehler.

Beispiel:
(eventuelle Programmierfehler einfach ignorieren, geht nur ums prinzip)
1
class interface
2
{
3
....
4

5
   void send(xyz variable)
6
   {
7
      bytelaenge=sizeof(variable);
8
      gesendetebytes=::send(variable, bytelaenge);
9
      if(gesendetebytes != bytelaenge)
10
      {
11
         ////ERROR
12
      }
13
   }
14

15
....
16
}

Gibt es da einen gängigen Weg für die Fehlerbehandlung?

Ich habe z.B. schon die Funktionen good() und bad() gesehen, welche 
angeben ob die letzte Klassenfunktion ohne Fehler ausgeführt wurde.

Dann gäbe es ja noch die try und catch Methode, welche eventuell aber 
hier stört da mancher Entwickler es einfach nur senden will.

Was würdet ihr empfehlen?
Gast #2132716
Lesenswert?

wenn man schon c++ programmiert dann macht man die fehlerbehandlung auch 
sinnvollerweise mit exceptions, wenn der fehler in einigen fällen nicht 
benötigt wird, kann man der send methode noch ein parameter mitgeben 
IgnoreError.
Gast #2133871
Lesenswert?

Christian schrieb:
> Hallo,
>
> Mich würden gängige Wege zur Fehlerbehandlung interessieren.
>
> Beispiel: Ich hätte die Klasse interface welche mit der seriellen
> Schnittstelle kommuniziert. Für das senden von Informationen gäbe es die
> Funktion send welche die C-funktion für das senden aufruft. Die
> c-funktion gibt die anzahl der gesendeten bytes zurück.
>
> Wenn jetzt aber nicht alle bytes gesendet wurden ist dies eigentlich ein
> Fehler.

Hmm, aber dann sollte die Funktion nicht zurückgeben wieviele Bytes 
versendet wurden sondern ob alle versendet wurden?

[Cut]
> Gibt es da einen gängigen Weg für die Fehlerbehandlung?
>
> Ich habe z.B. schon die Funktionen good() und bad() gesehen, welche
> angeben ob die letzte Klassenfunktion ohne Fehler ausgeführt wurde.
>
> Dann gäbe es ja noch die try und catch Methode, welche eventuell aber
> hier stört da mancher Entwickler es einfach nur senden will.

Und falls Du genau gemeint hast was der letzte Satz sagt - kommt in 
send() eine Schleife rein, mit einer begrenzten Anzahl Wiederholungen, 
die versucht die "übriggebliebenen" Bytes zu versenden (übrigens dito 
beim Lesen einer vorher bekannten Anzahl Bytes). Erst wenn nach allen 
Versuchen noch Bytes übrigbleiben, gibt es einen Fehler.

Aber Vorsicht! Es bringt i.A. wenig, alle Retries innerhalb weniger µs 
zu machen - so schnell wird Deine serielle Schnittstelle ihre Puffer 
nicht leeren können. Ist komplizierter als man erstmal denkt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren