Forum: Compiler & IDEs __packed


von west (Gast)


Lesenswert?

Ich bin gerade beim durcharbeiten eines c programms und bin nun auf 
folgende Struktur gestossen:

__PACKED_PRE
struct __PACKED_POST RCX_UART__TEXT_OUT_CNF_DATA_Ttag  /* text output 
confirmation data */
{
  /** Output text */
  TLR_INT8 szText[UART__TEXT_OUT_MAX_LEN];
};


habe mir die Definition von __PACKED_PRE und __PACKED_POST gesucht:

    #define __PACKED_PRE __packed
    #define _PACKED_POST __attribute_ ((_packed_))

Ich verstehe diese Struktur nicht (Warum __PACKED_PRE und __PACKED_POST)

von Karl H. (kbuchegg)


Lesenswert?

west wrote:
> habe mir die Definition von __PACKED_PRE und __PACKED_POST gesucht:
>
>     #define __PACKED_PRE __packed
>     #define _PACKED_POST __attribute_ ((_packed_))
>
> Ich verstehe diese Struktur nicht (Warum __PACKED_PRE und __PACKED_POST)

Kann es sein, dass da noch ein paar #if in der Nähe sind.

Ansonsten: Da wirst du wohl dein Compilerhandbuch bemühen
müssen. Das ist alles Nicht-Standard Zeugs.

Einige Compiler won solche Nicht-Standard Zusatzangaben
vor dem Datentyp sehen, andere hinter dem Datentyp wieder
andere überhaupt als Abschluss der Definition.

Ich schätze mal der Programmierer wollte sich hier eine
gewisse Flexibilität einbauen um verschiedene Compiler
befiedigen zu können.

Der eine möchte es sehen als
__packed struct xy { ... };

der andere will haben
struct _attribute_ ((_packed_)) xy { ... };

und so hat er halt den kleinsten gemeinsamen Nenner
gesucht und für sich definiert, dass er das immer als

PRE struct POST xy { ... };

schreibt und per Makro PRE bzw POST auf den richtigen Wert
bzw auf leer setzt.

Das alles ist jetzt aber aus der holen Hand geraten. Such mal
die Umgebung der PRE und POST Makros ab, ob die in einem #if
eingeschlossen ist, dass compilerspezifisch gesetzt wird.





von west (Gast)


Lesenswert?

Hi Karl Heinz
Stimmt, die defines sind compilerspezifisch
Hab ich übersehen
 Vielen Dank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.