Erik R. schrieb:> Ist es in C++ in Ordnung, wenn ich z.B. in Stack oder PC schreibe und> dann aus Mem lese (oder umgekehrt)? Oder wäre das "verbotenes" Type> Punning?
Ja, letzteres. Union type punning ist in C erlaubt (seit C99 IIRC), aber
in C++ ist es undefined behaviour. Es kann je nach Compiler aber
trotzdem funktionieren, zumindest bis zu dem Compiler-Update, wo es das
dann nicht mehr tut.
Danke für die Info. Generell ist in C++ die Verwendung von Unions dann
wohl nicht besonders sinnvoll. Nur zum Sparen von Speicherplatz in
manchen Situationen ... na ja.
Erik R. schrieb:> Generell ist in C++ die Verwendung von Unions dann wohl nicht besonders> sinnvoll. Nur zum Sparen von Speicherplatz in manchen Situationen ... na> ja.
Eine wichtige Aufgabe ist es z.b., Nachrichten typisieren zu können.
Nop schrieb:> zumindest bis zu dem Compiler-Update, wo es das dann nicht mehr tut.
Da schreibste ein 'extern "C"' drumherum und dann sollte es doch ok
sein. Hier geht es ja um Makroassembler-Registergefummel.
mfg mf
Achim M. schrieb:> Hier geht es ja um Makroassembler-Registergefummel.
Dazu nutze ich das nicht (und schon gar nicht Bitfields), sondern für
Datenstrukturen, bei denen ich eine Union nullen, kopieren oder auf
Gleichheit prüfen will.
Manchmal auch nur komponentenweise auf Gleichheit, dann mit xor/and. Das
ist auf einem Controller mit 32 bit elegant und schnell als Union über
einen uint32_t, weil man damit nur einen Branch verursacht.
Wilhelm M. schrieb:> In C++ nutzt man dafür eine "typsichere Union", aka std::variant.
damit bekommt er aber nicht das Union-Verhalten - er moechte ja ueber ja
ueber Mem oder gezielt zugreifen
cppbert3 schrieb:> damit bekommt er aber nicht das Union-Verhalten - er moechte ja ueber ja> ueber Mem oder gezielt zugreifen
Oh ja, ich hatte das nur überflogen ... ich las irgendwo: Speicherplatz
... sorry.
Nun, dann braucht er std::bit_cast<>()
cppbert3 schrieb:> das Union-Verhalten - er moechte ja ueber ja> ueber Mem oder gezielt zugreifen
Ist das der Sinn und Zweck von 'union'? Wäre es C Standard?
MaWin schrieb:> cppbert3 schrieb:>> das Union-Verhalten - er moechte ja ueber ja>> ueber Mem oder gezielt zugreifen>> Ist das der Sinn und Zweck von 'union'?
Nein.
> Wäre es C Standard?
Es wurde nachträglich in C erlaubt, weil es so häufig dafür genutzt
wurde.
Achim M. schrieb:> Nop schrieb:>> zumindest bis zu dem Compiler-Update, wo es das dann nicht mehr tut.>> Da schreibste ein 'extern "C"' drumherum und dann sollte es doch ok> sein. Hier geht es ja um Makroassembler-Registergefummel.>> mfg mf
Nö, hier hilft extern "C" nicht, das macht etwas ganz anderes.