La première déclaration indique au compilateur que someArray
est au moins 100 éléments de long. Cela peut être utilisé pour des optimisations. Par exemple, cela signifie également que someArray
n'est jamais NULL
.
Notez que la norme C ne demande pas au compilateur de diagnostiquer quand un appel à la fonction ne répond pas à ces exigences (c'est-à-dire qu'il s'agit d'un comportement silencieux non défini).
La deuxième déclaration déclare simplement someArray
(pas someArray
) comme const, c'est-à-dire que vous ne pouvez pas écrire someArray=someOtherArray
. C'est la même chose que si le paramètre était char * const someArray
.
Cette syntaxe n'est utilisable qu'à l'intérieur de l'élément le plus proche de l'utilisateur. []
d'un déclarateur de tableau dans une liste de paramètres de fonction ; cela n'aurait pas de sens dans d'autres contextes.
Le texte standard, qui couvre les deux cas ci-dessus, se trouve dans C11 6.7.6.3/7 (était 6.7.5.3/7 dans C99) :
La déclaration d'un paramètre en tant que ''tableau de type'' est adaptée en ''pointeur qualifié de type'', où les qualificatifs de type (s'il y en a) sont ceux spécifiés dans le cadre de l'option [
et ]
de la dérivation du type de tableau. Si le mot clé static apparaît également dans l'élément [
et ]
de la dérivation du type de tableau, alors, pour chaque appel à la fonction, la valeur de l'argument réel correspondant doit permettre d'accéder au premier élément d'un tableau comportant au moins autant d'éléments que spécifié par l'expression de la taille. d'éléments que ceux spécifiés par l'expression de la taille.