Maison > développement back-end > C++ > Les tableaux de longueur variable en C sont-ils conformes à la norme ?

Les tableaux de longueur variable en C sont-ils conformes à la norme ?

Susan Sarandon
Libérer: 2024-12-12 20:53:12
original
390 Les gens l'ont consulté

Do Variable-Length Arrays in C   Conform to the Standard?

Tableaux de longueur variable en C : exploration de la constance et de la conformité aux normes

L'extrait de code C ci-dessous a soulevé des questions quant à savoir s'il adhère au langage standard, notamment concernant les expressions constantes :

int main()
{
  int size = 10;
  int arr[size];
}
Copier après la connexion

Dans le Standard C (8.3.4/1), le la taille d'un tableau doit être une "expression constante intégrale". La taille, dans l'exemple ci-dessus, semble manquer de cette propriété.

Tableaux de longueur variable (VLA) et état de compilation

Le code se compile avec succès avec gcc 4.8 et Clang 3.2. car les deux compilateurs prennent en charge les tableaux de longueur variable (VLA) comme extension en C . Toutefois, Visual Studio CTP rejette le code avec un message d'erreur suggérant que la taille est nulle. Ce comportement est conforme à la norme C, qui n'autorise pas les tableaux de taille variable.

Avertissements du compilateur et extensions de langage

Certains compilateurs, tels que gcc et clang, fournir des avertissements lors de l'utilisation de VLA avec l'indicateur -pedantic. Cet indicateur avertit des fonctionnalités non standard potentielles, indiquant que le code viole la norme C. Dans ce cas, l'absence de taille constante pour le tableau rend l'utilisation de VLA inappropriée.

Expressions constantes intégrales

Expressions constantes intégrales, selon le projet de norme C (5.19 .3), doit répondre à des conditions particulières. Dans ce cas, size étant initialisé avec un littéral, il est qualifié d'expression constante intégrale. Cependant, pour se conformer à la norme C, "const" ou "constexpr" doit être utilisé pour le déclarer explicitement comme tel :

const int size = 10;
Copier après la connexion

ou

constexpr int size = 10;
Copier après la connexion

Conclusion

Bien que les réseaux de longueur variable offrent une flexibilité, leur utilisation doit être équilibrée par rapport à la conformité aux normes. Les compilateurs comme Visual Studio adhèrent à la norme C et rejettent le code qui enfreint ses règles. En comprenant le concept d'expressions constantes intégrales et en prenant en compte les extensions de langage, les développeurs peuvent garantir que leur code répond à la fois aux exigences de fonctionnalité et de standardisation.

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