Funktionsrückgabe 0 (OK) und -1 (Fehler)

Gast #498119
Lesenswert?

Gruß!

Wenn eine Funktion nur eine Statusmeldung zurückgibt (Fehler oder OK), 
wie diese hier:


int32_t send_to_buffer ( uint8_t data ){
   .... blah blah
  if ( TXRQ & 1 )
    return 0;
  else
    return -1;



warum stellt man für eine einzelne Zahl einen 32-Bit breiten Adressraum 
zur verfügung? Und warum muss es immer -1 bei Fehler sein?
Kann ich es auch so schreiben:

uint8_t send_to_buffer ( uint8_t data ){
   .... blah blah
  if ( TXRQ & 1 )
    return 0;
  else
    return 1;

? Das spart Speicher.


Persönliche Seite #498155
Lesenswert?

> Und warum muss es immer -1 bei Fehler sein?

Muss es nicht.
Das ist eine Konvention, an die sich halt einige Entwickler halten, aber 
viele auch nicht.
Bei den Windows-APIs beispielsweise ist oft 0 der Rückgabewert im 
Fehlerfalle und ein sich von 0 unterscheidender Wert das Resultat einer 
korrekten Operation (ein Handle auf was auch immer oder ein rein 
boolscher Wert).

Wie Du das implemntierst, bleibt Dir überlassen. Machs, wie Du's schön 
findest.

Die Wortbreite des Rückgabewerts sollte, wie Rahul bereits angedeutet 
hat, der nativen Wortbreite der Maschine entsprechen, auf der das 
Programm läuft. Auf einem AVR mit int32_t zu arbeiten ist in der Tat 
recht fragwürdig, auf einem x86-PC ist das hingegen vollkommen in 
Ordnung.

Der Speicherverbrauch ist nur temporär, da Rückgabewerte von Funktionen 
i.d.R. in einem CPU-Register transportiert werden, so sie denn 
hineinpassen.

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