Forum: Compiler & IDEs Funktionsrückgabe 0 (OK) und -1 (Fehler)


von Ricky (Gast)


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.



von Rahul, der Trollige (Gast)


Lesenswert?

>Kann ich es auch so schreiben:
Ja. Je nach Prozessor. Bei einer 32Bit-CPU ist ein Byte vom Aufwand her 
der gleiche, wenn nicht sogar ein grösserer, wie eine 32Bit-Variable.

von Ricky (Gast)


Lesenswert?

ahh deswegen. Ich nutze ein 32 Bit Controller.
Also ist es egal.. danke!

von Rufus Τ. F. (rufus) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.