Enum und Strukturen in C

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Enum und Strukturen in C

Beitrag 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 :mrgreen:

habs grad probiert, ein long und zwei short ergeben nämlich auch eine sizeof von 8. dann wird mir das zu verwirrend ^^
Marvin
Beiträge: 497
Registriert: 17.07.2005 14:42
Wohnort: Krikkit

Re: Enum und Strukturen in C

Beitrag 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)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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

Beitrag 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. :D
Deswegen wird wahrscheinlich aus einer "short, long, short"-Struktur intern eine "long, short, short" oder "short, short, long" werden.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Enum und Strukturen in C

Beitrag 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.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Enum und Strukturen in C

Beitrag 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?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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

Beitrag von NicTheQuick »

Google ist da dein Freund. Hab jetzt aber auch keine Lust selbst zu suchen. :wink:
Notfalls versuch es mal mit Google Codesearch
Antworten