Seite 2 von 2
Re: Enum und Strukturen in C
Verfasst: 25.05.2010 12:00
von Josh
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 ^^
Re: Enum und Strukturen in C
Verfasst: 25.05.2010 12:49
von Marvin
Wenn du willst, kannst du die Ausrichtung in C auch mittels __attribute__((packed)) am Ende der Struktur verhindern (zumindest bei GCC), z. B. so:
Code: Alles auswählen
struct TEST
{
uint32_t dwEinDoubleWord;
uint16_t wEinWord;
} __attribute__((packed));
Und das mit den longs und shorts ist logisch, da die CPU dann trotzdem für jeden short nur einen Speicherzugriff benötigt:
Code: Alles auswählen
Offset 0 1
Byte 0 1 2 3 4 5 6 7
aaaa aaaa aaaa aaaa bbbb bbbb cccc cccc
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)
Re: Enum und Strukturen in C
Verfasst: 25.05.2010 12:53
von NicTheQuick
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)
Ich kann diesen Glauben bestätigen, weil ich das auch schon gehört habe.

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
Verfasst: 25.05.2010 19:28
von Josh
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.
Re: Enum und Strukturen in C
Verfasst: 25.05.2010 21:07
von Josh
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?
Re: Enum und Strukturen in C
Verfasst: 25.05.2010 22:47
von NicTheQuick
Google ist da dein Freund. Hab jetzt aber auch keine Lust selbst zu suchen.

Notfalls versuch es mal mit
Google Codesearch