Unterschiedliche struct mit einer gleichen variable



  • Hiho!

    Folgendest:

    typedef struct eins
    {
      int id;
      int ganz_viele_andere_variablen;
    };
    
    typedef struct zwei
    {
      int id;
      int ganz_viele_andere_variablen_ungleich_struct_eins;
    };
    
    int getid(void* ptr)
    {
      struct eins* z;
      z = (struct eins*) ptr;
      return z->id;
    }
    

    wenn ich der getid nun einen Zeiger auf einen typen der struct 2 übergeb, dann sollte das ja eigentlich klappen. Kann man aber irgendwie sicher stellen, dass verschiedene compiler keine Probleme machen, weil sie die variablen in eienr anderen reihenfolge ablegen. Es sollen nicht nur int's als weitere Variablen vorhanden sein, also kann man darauf nicht bauen... Oder muss man sicher stellen, dass die structs immer die gleichen größen haben?

    Thx scho mal
    Bye
    m0rgu3



  • dafür gibts eigentlich unions:

    struct eins {
      // ganz viele Variablen
    };
    struct zwei {
      // ganz andere Variablen (aber auch viel)
    };
    struct zusammen {
      int tag;
      union inhalt {
        struct eins eins;
        struct zwei zwei;
      }
    };
    // Beispielanwendung:
    void machwas1(struct eins*);
    void machwas2(struct zwei*);
    void machwas(struct zusammen* z)
    {
      switch(z->tag) {
        case 0: machwas1(&zusammen->inhalt.eins); break;
        case 1: machwas2(&zusammen->inhalt.zwei); break;
      }
    }
    


  • Jo, nur dummerweiße sind die struct pointer aus Shared Objects oder DLL's.


Log in to reply