2010-02-23 3 views
1

Prenez l'extrait suivant:"Type et Taille Specifier" - Terminologie

1 #include <stdio.h> 
2 #include <stdlib.h> 
3 int foo(char [6]); 
4 
5 int main(void) { 
6   char* bar="hello"; 
7   return foo(bar); 
8 } 
9 
10 int foo(char f[6]) { 
11   return EXIT_SUCCESS; 
12 } 
13 

Quel est le terme technique pour le droit "char [6]" sur la ligne 3? Je l'appelle "spécificateur de type et de taille" qui décrit simplement ce à quoi il sert pour le compilateur.

La ligne entière 3 j'utiliser pour appeler « signature de pile d'appel de la fonction » ou simplement « signature de fonction ». "déclaration de fonction" ou "prototype de fonction" serait également correct, par opposition à "implémentation de fonction".

Remarque: Vous n'êtes pas obligé de me expliquer tout sur piles d'appels, cadres, conventions d'appel et. Al. Je cherche seulement la bonne terminologie ici. PAS toute la ligne 3, seulement comment appeler un seul spécificateur, comme "char [6]".

+0

Qu'entendez-vous par terme technique? Ça dépend du contexte. La ligne 3 pour moi (quand j'écris un programme C) est une déclaration, et plus précisément une déclaration de fonction, on pourrait aussi l'appeler un prototype de fonction. Aux yeux d'un éditeur de texte c'est la ligne 3 avec le texte :) Je suppose que vous voulez dire dans les yeux du compilateur? – Skurmedel

+0

Oui, aux yeux du compilateur, que la question est également marqué « compilateur théorie » :) Dites que vous travaillez sur un compilateur C d'une manière académique et que vous voulez nommer correctement les nœuds AST. – Flavius

Répondre

3

Dans la norme C (ISO 9899: 1999), ceci est un spécificateur de type de paramètre et, s'il n'y a pas d'identificateur en ce que spécificateur, le paramètre est dit anonyme.

Toute notion de "taille" fait partie du type (un type de tableau avec une taille inconnue est dit être incomplet). Notez qu'ici, la construction [6] ne définit pas un type de tableau mais un type de pointeur (les déclarateurs de tableau de niveau supérieur dans les listes de paramètres sont automatiquement convertis en déclarateurs de pointeurs et la taille de tableau putative est ignorée).

+0

Exactement le type de réponse que je cherchais. Je vais essayer de le mâcher de toutes les perspectives et finalement l'accepter. Merci! – Flavius

1

Dans la grammaire C, le char [6] à la ligne 3 est une parameter-type-list, consistant en un seul parameter-list, qui se compose d'un seul parameter-declaration.

Ce parameter-declaration est composé d'un declaration-specifier (char), et un abstract-declarator ([6]).

+0

Wow c'est aussi une très belle explication (et celle de Thomas). Je ne sais pas lequel accepter. Je les prendrais tous les deux! – Flavius

+0

Question bien que: Cette grammaire est-elle spécifiée dans la norme ISO ou toute autre norme ou avez-vous utilisé le parser.y d'un compilateur comme référence? Si ce dernier, lequel? – Flavius

+0

Il est spécifié à l'annexe A de la norme. Le dernier projet en ligne de la norme C99 peut être trouvé à http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1336.pdf. –

Questions connexes