Tout en essayant de mettre en œuvre un C11 parser (à des fins pédagogiques), j'ai trouvé que dans C11 (p. 470) , mais aussi en C99 (p. 412) (merci Jean!), le direct de demande de déclaration est définie comme:
(6.7.6) direct-declarator:
direct-declarator [ type-qualifier-list? * ]
Au début, je pensais que c'était une erreur dans la grammaire (la liste type ne devrait pas être facultatif). Cependant, quand j'ai essayé ma référence compilateur clang), j'ai eu une assez inattendue d'erreur:
int array[*] = { 1, 2, 3 };
// error: star modifier used outside of function prototype
Donc, apparemment, (en clang) cela s'appelle de la star modificateur.
J'ai vite appris qu'ils ne peuvent être utilisés dans les signatures de la fonction:
void foobar(int array[*])
Toutefois, ils ne peuvent être utilisés dans la déclaration. Essayez de l'utiliser dans une définition de fonction entraîne un message d'erreur:
void foobar(int array[*]) {
// variable length array must be bound in function definition
}
Donc autant que je peux dire, que le comportement est d'utiliser [*]
dans la déclaration de la fonction et ensuite utiliser un nombre fixe dans la définition de la fonction.
// public header
void foobar(int array[*]);
// private implementation
void foobar(int array[5]) {
}
Cependant, je ne l'ai jamais vu et je ne comprends pas très bien le but de qu'il soit.
- Quel est son but, pourquoi était-il venu?
- Quelle est la différence avec
int[]
? - Quelle est la différence avec
int *
?