Position einer Variable in einem Union festlegen
-
Ist es möglich, in einem Union festzulegen, welche Bytes eine bestimmte Variable einnehmen soll?
Beispiel:
union { long a; int b from byte 2 to byte 5; };
So dass die Variablen im Speicher so angelegt sind:
long a: XXXXXXXX int b: __XXXX__
-
Das ist so in C nicht möglich, auch weil das schreiben eines unionmembers und folgende lesen eines anderen members undefiniert ist. Auf manchen Architekturen führt das zu einem Busfehler. Dass int 4 Bytes groß ist und long 8 ist auch nicht festgelegt. Bei deinem Vorhaben ist insgesamt alles undefiniert.
Denoch will ich dich nicht hindern:union Ulli { long Lars; struct { char PeterDerPadder[2]; int Ingo; }Sabine; };
Das könnte dann so aussehen:
|LLLLLLLL|
(L = der long, C = der char, I = der int);
|CCIIII--|
-
nein das geht nicht - alles "member" fangen immer bei offset 0 an - sonst ist der sinn von dem union voellig zerstoert
moeglichweise mit einem bitfield (böse?) oder mach dir zugriffs-funktionen - alles andere ist nur rumgebastel
-
Bei der struct von roflo muss man aber auf das Alignement achten und ggf. die struct als packed definieren.
Das kann evtl. möglicherweise vielleicht klappen, ist aber vom Standard nicht abgedeckt.
-
Ja, wie gesagt: alles undefiniert. Btw Dirk, hättest mal lust, nen Account anzulegen anstatt immer als unreg zu posten?
-
roflo schrieb:
Ja, wie gesagt: alles undefiniert. Btw Dirk, hättest mal lust, nen Account anzulegen anstatt immer als unreg zu posten?
Nein.
-
Na wenn du meinst.....
-
Die Antwort war nicht von mir.
Aber das ist das Risiko als unreg
-
Ei
Dann wirds mal Zeit.
-
Hab mich geirrt. Die Antwort war doch von mir.
Aber das ist das Risiko, wenn man nach der Disco noch forumiert.