habs grad probiert, ein long und zwei short ergeben nämlich auch eine sizeof von 8. dann wird mir das zu verwirrend ^^
Enum und Strukturen in C
Re: Enum und Strukturen in C
danke für die erklärung. aber ich glaub ich werde mich doch lieber aufs probieren und vergleichen der c-sizeof mit pb-sizeof verlassen
habs grad probiert, ein long und zwei short ergeben nämlich auch eine sizeof von 8. dann wird mir das zu verwirrend ^^
habs grad probiert, ein long und zwei short ergeben nämlich auch eine sizeof von 8. dann wird mir das zu verwirrend ^^
Re: Enum und Strukturen in C
Wenn du willst, kannst du die Ausrichtung in C auch mittels __attribute__((packed)) am Ende der Struktur verhindern (zumindest bei GCC), z. B. so:
Und das mit den longs und shorts ist logisch, da die CPU dann trotzdem für jeden short nur einen Speicherzugriff benötigt:
PS: Ich glaube auch mal gehört zu haben, dass der C-Compiler die Elemente in Strukturen sogar vertauschen darf, wenn es das will. Insofern wäre __attribute__((packed)) dann wirklich zu empfehlen, wenn du die Möglichkeit dazu hast (das verhindert in dem Fall dann nämlich auch das Vertauschen)
Code: Alles auswählen
struct TEST
{
uint32_t dwEinDoubleWord;
uint16_t wEinWord;
} __attribute__((packed));Code: Alles auswählen
Offset 0 1
Byte 0 1 2 3 4 5 6 7
aaaa aaaa aaaa aaaa bbbb bbbb cccc cccc- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Enum und Strukturen in C
Ich kann diesen Glauben bestätigen, weil ich das auch schon gehört habe.Marvin hat geschrieben:PS: Ich glaube auch mal gehört zu haben, dass der C-Compiler die Elemente in Strukturen sogar vertauschen darf, wenn es das will. Insofern wäre __attribute__((packed)) dann wirklich zu empfehlen, wenn du die Möglichkeit dazu hast (das verhindert in dem Fall dann nämlich auch das Vertauschen)
Deswegen wird wahrscheinlich aus einer "short, long, short"-Struktur intern eine "long, short, short" oder "short, short, long" werden.
Re: Enum und Strukturen in C
ich will die c-struct ja nicht verändern, oder besser ich kann sie gar nicht verändern, weil es sich um vorgegebene strukturen handelt. wenn ich die c-strukturen ohne füllvariablen nach pb-strukturen umsetze, dann stimmt weiter hinten halt alles nicht mehr.
danke für euere erklärungen.
danke für euere erklärungen.
Re: Enum und Strukturen in C
noch eine frage. welche headerdatei muss in in meinem c-testprogramm inludieren, dass auch typen wie ULONG, USHORT, VARIANT, SCODE, DATA, SAFARRAY etc. etc. erkannt werden. gibt es da eine .h datei oder muss man sich sowas einzeln zusammensuchen?
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Enum und Strukturen in C
Google ist da dein Freund. Hab jetzt aber auch keine Lust selbst zu suchen. 
Notfalls versuch es mal mit Google Codesearch
Notfalls versuch es mal mit Google Codesearch