zero-size arrays



  • Hallo zusammen!

    folgenden Code würde gerne kompilieren, doch leider motzt der Compiler (VC++ 8.0) :(.

    #pragma pack(1)
    typedef struct 
    {
    tAttributeId    attributeId;
    UByte           datatype;
    char	        data[0];
    } tAttributesInfo;
    #pragma pack()
    
    #pragma pack(1)
    typedef struct 
    {
    	UWord           numAttributes;
    	tAttributesInfo attributes[0];
    } tGetAttributesInfo;
     #pragma pack()
    

    Ich bekomme die Fehlermeldung:

    error C2233: 'attributes' : arrays of objects containing zero-size arrays are illegal

    Aber das ist doch eine Deklaration und keine Definition??? Kennt vielleicht jemand von euch eine Lösung?

    Gruß && Danke



  • Wo ist das Problem, jedes Array muss eine Größe von mehr als 0 haben. Und genau das sagt auch der Compiler...



  • Aber in meinem Fall ist diese Bedingung ungünstig. Ich habe den Code aus einem gcc-Projekt und vermute, dass er sich dort kompilieren lässt.

    Gibt es vielleicht eine Möglichkeit diesen Ausdruck für den VC++ zu beschreiben??

    Gruß && Danke



  • So (zero-sized arrays) hat man afaik früher im gcc das gemacht, was seit C99 in abgeänderter Form zum Standard gehört (flexible array members).
    Ersteres ist aber wohl eine gcc-Erweiterung welche der MS C nicht kennt und zweiteres ist zwar offizieller Standard, den MS aber dummerweise ignoriert.

    Prinzipiell kann man das auch mit Standard C89 ähnlich machen (also einfach einen pointer statt zero-sized/flexible arrays in der struct), das würde aber viel Portierungsaufwand mit sich ziehen. Debuggen möchte ich das dann nicht 😉

    Verwende doch einfach den MinGW unter Windows?



  • MinGw kann ich leider nicht verwenden, der Vc MUSS verwendet werden 😞 ... Naja, dann werde ich das mit Pointern implementieren.

    Danke für deine Hilfe!



  • http://support.microsoft.com/?scid=kb%3Ben-us%3B98409&x=18&y=13

    Scheinst doch etwas Glück zu haben. Ich bin mir aber nicht sicher, inwieweit diese Erweiterung kompatibel zu zero-sized-arrays bzw. flexible-arrays (im Sinne von C99) ist.


Anmelden zum Antworten