Explicateur de déclarateur C

Suivre la liaison des pointeurs, tableaux, fonctions et qualificateurs dans une déclaration C11/C17 prise en charge.

À propos de cet outil

Saisir une déclaration et choisir Expliquer. Les sauts de ligne sont autorisés dans cette déclaration ; le point-virgule final est facultatif. Les exemples remplissent l’entrée sans l’évaluer. Lire les étapes numérotées du nom déclaré vers l’extérieur jusqu’au type de base. La section Jetons montre les jetons d’entrée individuels. Modifier l’entrée efface l’explication précédente.

Sans parenthèses de groupement, les suffixes tableau et fonction se lient avant les préfixes pointeur. Ainsi int *a[3]; déclare un tableau de trois pointeurs vers int, tandis que int (*a)[3]; déclare un pointeur vers un tableau de trois int. int *(*fp)(void); déclare un pointeur vers une fonction sans paramètres renvoyant un pointeur vers int.

Le sous-ensemble pris en charge suit les règles C11/C17 : types de base intégrés avec combinaisons valides de signed, unsigned, short et long ; const et volatile sur le type de base ou sur des pointeurs individuels ; parenthèses imbriquées ; tailles de tableau décimales positives sans zéros initiaux ; et déclarateurs de fonction. Les déclarations de paramètres peuvent contenir un type de base, des pointeurs et un nom facultatif. Les identifiants utilisent lettres ASCII, chiffres et tirets bas et ne peuvent pas commencer par un chiffre. Commentaires et directives du préprocesseur sont hors de ce sous-ensemble. Les qualificateurs appartiennent à leur propre niveau de type : const int *p; pointe vers const int, alors que int *const p; rend le pointeur lui-même qualifié const.

Sous C11/C17, f() laisse le nombre et les types de paramètres non spécifiés. f(void) déclare explicitement aucun paramètre. Cet outil n’utilise pas le sens C23 des parenthèses vides. Les tableaux ne peuvent pas avoir de types d’élément fonction ou incomplets ; les fonctions ne peuvent pas renvoyer directement des tableaux ou des fonctions. Un pointeur peut relier ces types, comme une fonction renvoyant un pointeur vers un tableau.

Hors de ce sous-ensemble : noms typedef, structures, unions, enums, initialiseurs, déclarations multiples, spécificateurs de classe de stockage, attributs, _Atomic, restrict, arguments variables, paramètres tableau ou fonction, tableaux de longueur variable et expressions de taille de tableau. Une syntaxe non prise en charge n’est pas une affirmation que la déclaration est invalide dans tous les programmes C. C’est un explicateur de déclarateur, pas un compilateur ni une vérification d’une unité de traduction entière.

Limites d’entrée : 8192 caractères, 512 jetons, profondeur d’imbrication 64, 64 couches de type dérivé, 64 paramètres, identifiants jusqu’à 128 caractères et tailles de tableau jusqu’à 20 chiffres. Les tableaux sont décrits symboliquement ; aucun stockage n’est alloué ni taille en octets calculée.

Sources : WG14 N1570, C11 draft, sections 6.7.2, 6.7.3 and 6.7.6 ; WG14 N3096, C23 draft, section 6.7.6.3, for the changed meaning of ().