Maison > développement back-end > C++ > Pourquoi les compilateurs C acceptent-ils les tableaux de longueur variable bien qu'ils ne soient pas standard ?

Pourquoi les compilateurs C acceptent-ils les tableaux de longueur variable bien qu'ils ne soient pas standard ?

Patricia Arquette
Libérer: 2024-12-22 02:46:15
original
336 Les gens l'ont consulté

Why Do C   Compilers Accept Variable Length Arrays Despite Them Being Non-Standard?

Tableaux de longueur variable en C : acceptation du compilateur malgré un statut non standard

En C, les tableaux de longueur variable (VLA) ne font pas partie de la norme. Cependant, les compilateurs comme g et clang acceptent étonnamment les déclarations VLA, mais avec des messages d'avertissement concernant une utilisation non standard. Ce comportement inattendu soulève des questions sur la motivation du compilateur et la position du standard sur les VLA.

Acceptation du compilateur

La raison derrière l'acceptation des VLA par le compilateur malgré leur nature non standard réside dans la décision des auteurs du compilateur. Les compilateurs C, en particulier GCC, donnent la priorité à la compatibilité avec les anciens compilateurs C, y compris la prise en charge de fonctionnalités historiquement acceptables mais non conformes à la norme C. Cette approche axée sur la compatibilité explique la réticence des compilateurs à rejeter les déclarations VLA.

Interprétation standard

La norme C interdit explicitement l'utilisation de VLA dans [dcl.array] . Il précise que les déclarations de tableau doivent spécifier la taille à l'aide d'une expression constante, ce qui n'est pas le cas des VLA. En d'autres termes, C ne prend pas en charge nativement l'allocation de tableaux dont les tailles sont déterminées lors de l'exécution.

Implémentation du compilateur

Malgré l'interdiction de la norme, les compilateurs qui acceptent les VLA le font en les implémentant comme extensions du langage. L'implémentation exacte varie selon les compilateurs et les plates-formes. Cependant, l'examen du code assembleur produit par le compilateur révèle que les déclarations VLA sont généralement mappées sur des tableaux alloués à la pile, de la même manière que les tableaux normaux sont implémentés.

Conclusion

Compilateurs L'acceptation des VLA en C est un exemple d'extensions de compilateur qui s'écartent du standard du langage. Même si de telles extensions peuvent être utiles dans des situations spécifiques, il est crucial d’être conscient de leurs limites et de les utiliser avec prudence. Les développeurs peuvent s'appuyer sur les avertissements et la documentation du compilateur pour déterminer la disponibilité et le comportement des extensions VLA dans leur environnement de compilateur cible.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal