Forum: Mikrocontroller und Digitale Elektronik C-Konstrukt: gibt es etwas besseres?


von Karlheinz (Gast)


Lesenswert?

Einen Puffer mit unterschiedlichen Typen (long, int, short, char) fülle 
ich u. a. wie folgt:

*(unsigned short*)(&puffer[40]) = value ;

short  2 Bytes
value  4 Bytes
puffer unsigned char

Ist diese Konstruktion sicher oder gibt es etwas besseres?

von Stefan B. (Gast)


Lesenswert?

Ist unsicher.

Du kopierst ein long an eine short * Position. Wenn der Zeiger erhöht 
würde (hier nicht der Fal), hättest du einen sicheren Fehler.

Bei manchen Prozessoren können short oder long nur an geraden 
Byteadressen beginnen. &puffer[40] kann eine ungerade Adresse sein.

von Jürgen F. (unterstrom)


Lesenswert?

Hallo Karlheinz,
schau mal unter dem Schlagwort "union" nach, da findest Du was besseres.

Jürgen

von Karlheinz (Gast)


Lesenswert?

Vielen Dank für eure Antworten.

@Stefan
Bei welchen Prozessoren ist dies der Fall? ARM7?

@ Jürgen
Die "union" sieht gut aus. Werde mich sogleich mit ihnen beschäftigen.

von Stefan B. (Gast)


Lesenswert?


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.