Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas initialiser une taille de tableau avec une variable « const int » en C ?

Pourquoi ne puis-je pas initialiser une taille de tableau avec une variable « const int » en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 21:17:30927parcourir

Why Can't I Initialize an Array Size with a `const int` Variable in C  ?

Le dilemme insaisissable de l'initialisation de la taille d'un tableau avec const int

Dans le domaine du C, l'utilisation de constantes pour l'initialisation de la taille d'un tableau pose souvent un dilemme déroutant. Bien que certaines situations permettent cette pratique de manière transparente, d'autres provoquent des erreurs de compilation énigmatiques.

Considérez les extraits de code suivants :

<code class="cpp">const int size = 2;
int array[size] = {0};</code>

Dans cet exemple, le compilateur autorise volontiers la déclaration d'un tableau avec un taille spécifiée par la variable constante 'size'. La raison réside dans la nature de l'expression d'initialisation de « taille ». Il s'agit d'une expression constante, ce qui signifie qu'elle peut être entièrement évaluée au moment de la compilation. Cela permet au compilateur de déterminer la taille exacte du tableau lors de la compilation, facilitant ainsi l'allocation de mémoire en conséquence.

Contrairement à ce qui précède, jetez un œil à cet extrait :

<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0};</code>

Ici, le compilateur » lance une crise, déplorant une « erreur de compilation ». Le nœud du problème réside dans l’expression utilisée pour initialiser « taille ». Il s'agit d'une variable non constante (« a »). Cela relègue l’expression au domaine des expressions non constantes. Par conséquent, le compilateur ne peut pas déterminer la taille du tableau au moment de la compilation.

Ce comportement découle d'une décision fondamentale du comité des normes C. Le comité a privilégié la simplicité et le caractère explicite plutôt que la flexibilité. La mise en œuvre de cette dernière nécessiterait une analyse de flux complexe, en différenciant les expressions non modifiables telles que « const int size = a; » et des expressions vraiment non constantes comme 'const int size = foo();'. Une telle complexité a été jugée indésirable.

Ainsi, la règle demeure : les tailles de tableau ne peuvent être initialisées qu'à l'aide d'expressions constantes. Cela garantit que le compilateur peut déterminer sans équivoque la taille du tableau, garantissant une allocation de mémoire prévisible et une compilation fluide. Gardez toujours ce précepte à l’esprit lorsque vous vous aventurez dans le monde de l’initialisation de la taille d’un tableau.

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