Maison  >  Article  >  développement back-end  >  Pourquoi les tailles de tableau ne peuvent-elles pas être initialisées avec des variables `const int` en C ?

Pourquoi les tailles de tableau ne peuvent-elles pas être initialisées avec des variables `const int` en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 05:29:02624parcourir

Why Can't Array Sizes Be Initialized with `const int` Variables in C  ?

Pourquoi la limitation de la taille des tableaux avec Const Int est-elle parfois appliquée ?

En C, les tailles de tableaux peuvent être spécifiées à l'aide d'entiers constants. Cependant, cette flexibilité a des limites, comme le démontrent les exemples suivants :

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

Pourquoi le premier exemple se compile-t-il avec succès alors que le second échoue ?

Explication

La norme C dicte ces limitations de taille de tableau en fonction de la nature de l'expression utilisée pour initialiser la taille.

Expression constante

Dans le premier exemple, const int size = 2; est une expression constante car la valeur de size est connue au moment de la compilation. Puisque le compilateur connaît la taille du tableau, il peut allouer la mémoire nécessaire lors de la compilation.

Expression non constante

Dans le deuxième exemple, const int size = a; n'est pas une expression constante car la valeur de a n'est déterminée qu'au moment de l'exécution. Cela empêche le compilateur de connaître la taille du tableau lors de la compilation, ce qui rend impossible l'allocation de mémoire au moment de la compilation.

L'immuabilité n'est pas pertinente

Notez que le deuxième exemple a toujours une valeur effectivement constante pour la taille , mais cela n'est pas pris en compte par le compilateur. Les règles se concentrent sur le type d'expression utilisé, et int a = 2 ; utilise des variables mutables, ce qui en fait une expression non constante.

Complexité de l'analyse de flux

Autoriser l'initialisation du runtime pour l'allocation du temps de compilation nécessiterait une analyse de flux. Le compilateur devrait faire la différence entre des expressions telles que :

<code class="cpp">int a = 2;
const int size = a;</code>

et

<code class="cpp">int a = foo();
const int size = a;</code>

où l'expression de taille est identique, mais la valeur réelle dépend du comportement d'exécution. Cette complexité est jugée inutile par le comité C.

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