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.
>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.
ahh deswegen. Ich nutze ein 32 Bit Controller. Also ist es egal.. danke!
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.