2010-06-08 11 views
0

J'essaie d'initialiser une structure qui se termine par un tableau [0] (ici, char iedata[0]) pour la charge utile réelle du paquet. Si je tente de l'initialiser en ligne, comme ceci:Avertissement d'initialisation de matrice

struct some_packet pkt = { 
    .elem1 = blah, .elem2 = bleh, 
    .iedata = { 
     1, 2, 3, 4 
    } 
}; 

Je reçois un avertissement de gcc:

warning: (near initialization for ‘pkt.iedata’) 

Y at-il une bonne façon de marquer que c'est une bonne initialisation?

Répondre

1

Si vous êtes en mesure de compiler en mode C99, vous pouvez essayer d'utiliser des tableaux de longueur flexibles standards plutôt que le hack zéro longueur: http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

Notez que dans GCC 3.0 et plus récentes, entrées supplémentaires dans un initialiseur de tableau sera supprimé (selon la documentation ci-dessus).

1

Lorsque vous utilisez l'initialisation C99, pourquoi ne pas faire du membre un FAM approprié, c'est-à-dire des données char []; La seule façon de créer des structures valides avec un membre FAM (ou struct hack) consiste à allouer dynamiquement la quantité de stockage excédentaire correcte pour le dernier membre. Ainsi, comme le suggère l'avertissement, votre initialisation locale n'est pas valide.