Tableau de longueur nulle
En C , il est possible de définir des structures contenant des tableaux de longueur nulle. Ceci est appelé C-Hack et peut être utile dans certaines situations.
Étude de cas
Une récente refactorisation de code a révélé plusieurs structures avec des tableaux de longueur nulle, telles que comme :
struct someData { int nData; BYTE byData[0]; }
Pourquoi une longueur nulle Des tableaux ?
Habituellement, un compilateur génère un avertissement pour les tableaux de longueur nulle, mais dans ce cas, les avertissements ont été supprimés. Une raison possible de l'utilisation de tableaux de longueur nulle est de permettre la création d'un tableau de n'importe quelle longueur au moment de l'exécution.
Création de structures avec des tableaux de longueur nulle
Tentative de création une nouvelle structure avec un tableau de longueur nulle utilisant l'opérateur "new" entraînera une erreur. Au lieu de cela, la technique suivante peut être utilisée :
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
Cette fonction alloue de la mémoire pour un objet de type someData et son tableau byData de la taille spécifiée.
Approches alternatives
Dans de nombreux cas, une approche plus appropriée serait d'utiliser un pointeur ou un tableau de longueur 1 au lieu d'un tableau de longueur nulle. Cela éliminerait le besoin d'une allocation de mémoire personnalisée et rendrait le code plus lisible et maintenable.
Conclusion
Les tableaux de longueur nulle peuvent être une technique utile dans certaines situations, mais ils doivent être utilisés avec prudence. Dans la plupart des cas, des approches alternatives, telles que des pointeurs ou des tableaux de longueur 1, sont plus appropriées et rendraient le code plus simple à comprendre et à maintenir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!