B
RHBaum schrieb:
ne zuweissung oder initialisierung mit nem 64bit wert muss also schiefgehen, durch die typpruefung.
Klar kann man es reinterpreten, da die struct eigentlich nur genau 64 bit belegt und die auch als longlong ablegt.
Die Zuweisung geht nicht schief. Ich habe dein Post zum Anlass genommen, alles nochmal durch zu probieren und da ist mir mein Irrtum aufgefallen. Es ist doch kein Compiler Fehler! War ja irgendwie klar - Gut das die M$ Programmierer hier nicht mitlesen, hätte sie mit meiner Behauptung sicher beleidigt/empört. Daher schnell meine Richtigstellung:
Es ist eins der vielen C++ Syntax Fallen in die man reintappen kann: Da man den Speicherplatz innerhalb einer Struktur/Union nicht benennen darf (wie es z.B. in Delphi sogar erforderlich ist), kann man bei einer Union nur den ersten "Zweig" befüllen, Auf u und QuadPart hat man bei der Initialisierung also keinen Zugriff. Zum Glück passen alle meine Konstanten in 32Bit, so dass meine obige Lösung für mich bestens funktioniert. Ansonsten hätte ich auch noch die in 32Bit zerhakten Werte deklarieren müssen.
Bei meinen Ausgangsbeispiel nimmt der Compiler nur den unteren 32Bit Teil meiner Konstanten und packt sie abwechselnd nach LowPart und HighPart. Da es zulässig ist, durch weglassen von Werten eine Struktur, Union oder ein Array unvollständig zu befüllen, fällt es beim Compilieren nicht auf, dass nur die Hälfte des Speichers initialisiert wird.
RHBaum schrieb:
Und mit inbuild 64 bit Datentypen funktionieren dann auch die constanten mit zuweisung ... und makros dafuer sind pfui pfui pfui ...
Nicht so pfui wie reinterpret_cast was wirklich nur in extremen Ausnahmefällen verwenden werden soll. Da ich meine Konstanten bewusst ins Code-Segment bringen will, sind Makros sicher das einzige Mittel um das erreichen zu können. Das ich mit den Konstanten auch das Array im Datensegment befüllle, ist nur wegen der Konsistenz, bei Änderung der Konstanten soll ein Änderung am Quelltext genügen.
LG
Bernd