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 ?
La norme C dicte ces limitations de taille de tableau en fonction de la nature de l'expression utilisée pour initialiser la taille.
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.
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.
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.
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!