Typedef kombiniert mit #define



  • Ich habe folgendes Konstrukt entdeckt:

    #define PACKED
    
    typedef struct {
    	int a;
    	int b;
    } PACKED one;
    

    Ohne das PACKED verstehe ich den Code ("one" kann als Alias für das struct verwendet werden). Aber was bewirkt dieses "PACKED" ?

    Schon einmal Danke im Voraus



  • Hi, per #define ersetzt der Preprozessor einfach den Identifier mit dem was da nach kommt. Also in deinem Beispiel ist das einfach äquivalent zu:

    typedef struct {
        int a;
        int b;
    } one;
    

    Man könnte aber sowas machen:

    #define PACKED three, two,
    
    typedef struct {
        int a;
        int b;
    } PACKED one;
    

    was dann im sowas ergäbe:

    typedef struct {
        int a;
        int b;
    } three, two, one;
    

  • Mod

    In diesem Falle bewirkt es gar nichts, da das Makro leer ist. Der Sinn ist, dass man dieses Makro auf bestimmten Systemen aktivieren kann. Viele Compiler unterstützen nämlich noch Schalter, mit denen man das interne Layout eines structs beeinflussen kann, aber ob und wie das genau geht, kommt jeweils auf den genauen Compiler und/oder System an. Mit dem Makro kann man zentral festlegen, ob und welcher Schalter benutzt werden soll.



  • Anmerkung: die Kostruktion mit typedef struct stammt aus C. In C++ ist das nicht notwendig oder sinnvoll.


Log in to reply