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.