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 ?

Pourquoi g et clang acceptent-ils les tableaux de longueur variable (VLA) en C malgré la norme qui les interdit ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-30 09:06:17176parcourir

Why Do g   and clang   Accept Variable Length Arrays (VLAs) in C   Despite the Standard Prohibiting Them?

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

  • Les VLA en C sont considérés comme des extensions du compilateur et ne doivent pas être invoqués .
  • Le code contenant des VLA peut présenter un comportement différent selon le compilateur utilisé.
  • Il est déconseillé d'utiliser des VLA dans du code destiné à être portable entre différents compilateurs C.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn