Maison >développement back-end >C++ >Pourquoi g et clang acceptent-ils les tableaux de longueur variable (VLA) en C malgré la norme qui les interdit ?
Accepter les tableaux de longueur variable (VLA) en C malgré un statut non standard
Bien que C ne prenne pas officiellement en charge les tableaux de longueur variable (VLA ), les compilateurs g et clang les acceptent étonnamment comme syntaxe valide. Cela soulève des questions sur le comportement du compilateur et la position du standard sur les VLA.
Acceptation du compilateur
Les compilateurs C comme g et clang autorisent les VLA en tant qu'extension non standard. Cela est probablement dû à la compatibilité historique avec les anciens compilateurs C qui autorisaient de telles déclarations.
Définition standard
La norme C interdit les VLA conformément à la règle de grammaire dans [dcl. tableau]. Seules les expressions constantes sont autorisées pour spécifier la taille des tableaux. Dans l'exemple de code fourni, n n'est pas une expression constante, ce qui rend la déclaration VLA invalide selon la norme.
Détails de mise en œuvre
Bien qu'elles soient non standard, les VLA en C sont souvent implémentés en allouant de la mémoire sur la pile et en utilisant une boucle pour accéder aux éléments. Cependant, ce comportement dépend du compilateur et peut varier selon les différentes implémentations.
Implications
Recommandation
Pour la portabilité du code et pour garantir le respect de la norme C, il il est recommandé d'utiliser l'allocation dynamique de mémoire (par exemple, new[]) pour créer des tableaux dont les tailles ne sont pas connues au moment de la compilation.
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!