Maison > développement back-end > C++ > `int size = 10;` est-il une expression constante en C : un problème de compatibilité du compilateur ?

`int size = 10;` est-il une expression constante en C : un problème de compatibilité du compilateur ?

Patricia Arquette
Libérer: 2024-12-09 22:08:15
original
877 Les gens l'ont consulté

Is `int size = 10;` a Constant Expression in C  : A Compiler Compatibility Issue?

Est-ce que "int size = 10;" Générer une expression constante ?

L'extrait de code ci-dessous se compile avec succès dans gcc 4.8 et Clang 3.2 :

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

Selon la norme C (8.3.4/1), le la taille d'un tableau doit être une expression constante intégrale. Cependant, il semble que la « taille » dans le code ne soit pas une expression constante intégrale. Est-ce un bug du compilateur ou un oubli dans notre compréhension ?

Visual Studio C rejette ce code avec le message : "erreur C2466 : impossible d'allouer un tableau de taille constante 0". Cela implique que le compilateur considère la « taille » comme étant nulle.

Explication

gcc et Clang prennent en charge les tableaux de longueur variable (VLA) en tant que extension en C. VLA est une fonctionnalité C99 qui permet de déterminer la taille d'un tableau au moment de l'exécution. Dans l'extrait de code, la « taille » est déterminée au moment de la compilation, mais ce n'est pas une constante littérale. Par conséquent, la « taille » est considérée comme un VLA dans gcc et Clang.

Visual Studio, en revanche, ne prend pas en charge VLA et adhère à la norme C. En conséquence, il rejette le code car la « taille » n'est pas une constante littérale.

Conformité à la norme

La norme C définit une expression constante intégrale comme une expression qui, une fois évaluée, aboutit à une valeur de type énumération intégrale ou sans portée. Dans ce cas, "size" est initialisé avec une valeur littérale (10), ce qui en fait une expression constante intégrale.

L'utilisation de l'indicateur "-pedantic" dans gcc et Clang générera un avertissement concernant les tableaux de longueur variable. dans l'extrait de code. L'utilisation de "-pedantic-errors" fera de l'avertissement une erreur.

Solution

Pour se conformer à la norme C, "size" peut être déclaré comme const ou constexpr entier :

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

ou

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

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