www.mikrocontroller.net

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


Autor: Ricky (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.



Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ricky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahh deswegen. Ich nutze ein 32 Bit Controller.
Also ist es egal.. danke!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.