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-specifiers
opt attribute-seq
opt declarator
declaration-list
opt compound-statement
/* attribute-seq
est spécifique à Microsoft */
Les paramètres de prototype sont les suivants :
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
opt
type-specifier
declaration-specifiers
opt
type-qualifier
declaration-specifiers
opt
declaration-list
:
declaration
declaration-list
declaration
declarator
:
pointer
opt direct-declarator
direct-declarator
: /* Un déclarateur de fonction */
direct-declarator
(
parameter-type-list
)
/* Déclarateur de nouveau style */
direct-declarator
(
identifier-list
opt )
/* 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-declarator
opt
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-list
opt statement-list
opt }
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.