Seite 1 von 1

StructureUnion - Quad/Double initialisieren

Verfasst: 19.06.2019 22:10
von Josh
Ich habe in einer StructureUnion ein Quad und ein Double. Wenn ich nun alles auf Null setzen will, genügt es dann in jedem Fall, wenn ich Quad auf Null setze und Double ist dann auch Null? Ich will mir eine Abfrage sparen, was für einen Typ ich gerade verwende.

Code: Alles auswählen

Structure MyStruc
  StructureUnion
    Quad.q
    Dbl .d
  EndStructureUnion
EndStructure

Define x.MyStruc

x\Dbl  = 3.141592654
x\Quad = 0

Debug x\Dbl
In diesem Beispiel funktioniert es ja, ist das aber in allen Fällen gewährleistet?

Re: StructureUnion - Quad/Double initialisieren

Verfasst: 19.06.2019 22:18
von STARGÅTE
Bei einer StructureUnion belegen alle Felder in dieser Union den selben Speicher.
Die Quad und die Double haben beide 8 Byte Länge.
Da die 0 (Quad) in diesem Fall die selbe Bitsequenz hat wie die +0.0 (Double) ist beides null.
Das gilt aber nur für diesen speziellen Fall.

Wenn du die Quad auf -1 setzt, kommt bei der Double z.B. NaN raus, und nicht etwa -1.0

Re: StructureUnion - Quad/Double initialisieren

Verfasst: 19.06.2019 22:23
von Josh
Danke für die Antwort. Es ging mir ja nur darum, die Werte auf null zu setzen. War mir eben nicht sicher, ob dies in allen Fällen gewährleistet ist.

Re: StructureUnion - Quad/Double initialisieren

Verfasst: 20.06.2019 02:48
von Demivec
Auch:

Code: Alles auswählen

ClearStructure(@x, MyStruc)