Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les arguments sont des noms de valeurs passées à une fonction par un appel de fonction. Les paramètres sont les valeurs que la fonction s’attend à recevoir. Dans un prototype de fonction, les parenthèses qui suivent le nom de la fonction contiennent une liste complète des paramètres de la fonction et de leurs types. Les déclarations de paramètres spécifient les types, tailles et identificateurs des valeurs stockées dans les paramètres.
Syntaxe
function-definition :
declaration-specifiers
opterattribute-seqopterdeclaratordeclaration-listoptercompound-statement
/*
attribute-seq est spécifique à Microsoft */
declarator :
pointer
optezdirect-declarator
direct-declarator: /* Un déclarateur de fonction */
direct-declarator
(
parameter-type-list
) /* Déclarateur de nouveau style */
direct-declarator
(
identifier-list
opter) /* Déclarateur de style obsolète */
parameter-type-list: /* La liste des paramètres */
parameter-list
parameter-list
, ...
parameter-list :
parameter-declaration
parameter-list
,
parameter-declaration
parameter-declaration :
declaration-specifiers
declarator
declaration-specifiers
abstract-declarator
opter
Il parameter-type-list s’agit d’une séquence de déclarations de paramètre séparées par des virgules. La forme de chaque paramètre d’une liste de paramètres ressemble à ceci :
registeroptertype-specifierdeclaratoropter
Les paramètres de fonction déclarés avec l’attribut auto génèrent des erreurs. Les identificateurs des paramètres sont utilisés dans le corps de la fonction pour faire référence aux valeurs passées à la fonction. Vous pouvez nommer les paramètres dans un prototype, mais les noms sortent de l’étendue à la fin de la déclaration. Cela signifie que les noms de paramètres peuvent être affectés de la même façon ou différemment dans la définition de fonction. Ces identificateurs ne peuvent pas être redéfinis dans le bloc le plus externe du corps de la fonction, mais ils peuvent être redéfinis dans des blocs internes imbriqués comme si la liste de paramètres était un bloc englobant.
Chaque identificateur doit parameter-type-list être précédé de son spécificateur de type approprié, comme illustré dans cet exemple :
void new( double x, double y, double z )
{
/* Function body here */
}
Si au moins un paramètre se produit dans la liste des paramètres, la liste peut se terminer par une virgule suivie de trois points (, ...). Cette construction, appelée « notation des points de suspension », indique un nombre variable d’arguments à la fonction. Pour plus d’informations, consultez Appels avec un nombre variable d’arguments. Toutefois, un appel à la fonction doit avoir au moins autant d’arguments qu’il existe des paramètres avant la dernière virgule.
Si aucun argument ne doit être passé à la fonction, la liste des paramètres est remplacée par le mot clé void. Cette utilisation void est distincte de son utilisation en tant que spécificateur de type.
L’ordre et le type de paramètres, y compris toute utilisation de la notation des points de suspension, doivent être identiques dans toutes les déclarations de fonction (le cas échéant) et dans la définition de la fonction. Les types des arguments après les conversions arithmétiques habituelles doivent être compatibles avec les types des paramètres correspondants. (Consultez les conversions arithmétiques habituelles pour plus d’informations sur les conversions arithmétiques.) Les arguments qui suivent les points de suspension ne sont pas vérifiés. Un paramètre peut avoir n’importe quel type fondamental, structure, union, pointeur ou tableau.
Le compilateur effectue les conversions arithmétiques habituelles indépendamment sur chaque paramètre et sur chaque argument, si nécessaire. Après la conversion, aucun paramètre n’est plus court qu’un intparamètre et aucun paramètre n’a float de type, sauf si le type de paramètre est explicitement spécifié comme float dans le prototype. Cela signifie, par exemple, que la déclaration d’un paramètre en tant que char paramètre a le même effet que de le déclarer en tant que int.