Définitions de fonction C

Une définition de fonction spécifie le nom de la fonction, les types et le nombre de paramètres qu’elle s’attend à recevoir et son type de retour. Une définition de fonction comprend également un corps de fonction avec les déclarations de ses variables locales, ainsi que les instructions qui déterminent ce que fait la fonction.

Syntaxe

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration: /* Autorisé uniquement dans la portée (fichier) externe */
function-definition
declaration

function-definition:
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

/* attribute-seq est spécifique à Microsoft */

Les paramètres de prototype sont les suivants :

declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

declaration-list:
declaration
declaration-list declaration

declarator:
pointeropt direct-declarator

direct-declarator: /* Un déclarateur de fonction */
direct-declarator ( parameter-type-list ) /* Déclarateur de nouveau style */
direct-declarator ( identifier-listopt ) /* Déclarateur de style ancien */

La liste des paramètres dans une définition utilise la syntaxe suivante :

parameter-type-list: /* Liste de paramètres */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declaratoropt

La liste des paramètres dans une définition de fonction de style ancien utilise la syntaxe suivante :

identifier-list: /* Utilisé dans les définitions et les déclarations de fonction de style ancien */
identifier
identifier-list , identifier

La syntaxe du corps de la fonction est la suivante :

compound-statement:
{ declaration-listopt statement-listopt }

Les seuls spécificateurs de classe de stockage pouvant modifier une déclaration de fonction sont extern et static. Le spécificateur extern signifie que la fonction peut être référencée à partir d'autres fichiers ; autrement dit, son nom est exporté vers l'éditeur de liens. Le spécificateur static signifie que la fonction ne peut pas être référencée à partir d’autres fichiers ; autrement dit, le nom n’est pas exporté par l’éditeur de liens. Si aucune classe de stockage n'apparaît dans une définition de fonction, extern est utilisé. Dans tous les cas, la fonction est toujours visible du point de définition jusqu'à la fin du fichier.

Les éléments facultatif declaration-specifiers et obligatoire declarator spécifient ensemble le type de retour et le nom de la fonction. declarator est une combinaison de l'identificateur qui nomme la fonction et des parenthèses qui suivent le nom de fonction. L’élément non terminal attribute-seq facultatif est une fonctionnalité spécifique à Microsoft définie dans Attributs de fonction.

L’élément direct-declarator (dans la syntaxe declarator) spécifie le nom de la fonction définie et les identificateurs de ses paramètres. Si le direct-declarator inclut un parameter-type-list, la liste spécifie les types de tous les paramètres. Ce déclarateur sert également de prototype de fonction pour les appels ultérieurs à la fonction.

Un declaration dans declaration-list dans les définitions de fonction ne peut pas contenir de storage-class-specifier autre que register. Le type-specifier dans la syntaxe declaration-specifiers ne peut être omis que si la classe de stockage register est spécifiée pour une valeur de type int.

L’élément compound-statement est le corps de la fonction contenant des déclarations de variables locales, des références à des éléments déclarés extérieurement et des instructions.

Les sections Attributs de fonction, Classe de stockage, Type de retour, Paramètres et Corps de la fonction décrivent les composants de la définition de fonction en détail.

Voir aussi

Fonctions