Syntaxe de la déclaration des fonctions
Les fonctions peuvent être globales ou membres d'une classe ou d'un struct. Elles sont déclarées à l'aide de la séquence suivante :
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] declarator [cv-qualifer]
[exception-spec]
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] [*|&] [ms-modifer] identifier
( argument-list ) [cv-qualifer] [exception-spec]
Spécificateur de déclaration. Reportez-vous à l'article Spécificateurs.
Dans une classe, spécificateur friend facultatif.
Spécificateur de classe de stockage facultatif. Pour les fonctions globales, les spécificateurs de classe de stockage autorisés sont static et extern. Pour les fonctions membres de classe, extern n'est pas autorisé.
Spécificateur de fonction facultatif. Pour les fonctions globales, le seul spécificateur de fonction autorisé est inline. Pour les fonctions membres de classe, virtual et inline sont autorisés et, pour les constructeurs, explicit est autorisé.
Spécificateur de type indiquant le type de retour (sujet à modification en type pointeur ou référence par l'utilisation de * ou &).
Déclarateur.
Opérateurs de pointeur ou de référence facultatifs qui modifient le type de retour.
Modificateur facultatif spécifique à Microsoft, spécifiant la convention d'appel. Consultez Modificateurs spécifiques à Microsoft.
Nom de la fonction. Si la fonction est un membre d'une classe ou d'un struct, le nom peut être qualifié à l'aide de l'opérateur de résolution de portée.
Liste des déclarations d'arguments entre parenthèses ().
Qualificateur const ou volatile facultatif. Dans ce contexte, const peut être utilisé uniquement pour les membres de classe et permet d'indiquer que la fonction ne modifiera pas les données membres de la classe.
Si le type de retour est un pointeur fonction, la syntaxe du déclarateur peut être plus complexe, comme cela est expliqué ci-dessous.
- Spécification d'exception facultative indiquant quelles exceptions la fonction lève. Reportez-vous à l'article Spécifications d'exceptions.
Le type de l'identificateur ainsi déclaré peut être construit comme suit : fonction const ou volatile (si spécifiée), prenant la liste d'arguments spécifiée, et retournant le type indiqué par le spécificateur de déclaration.
L'exemple ci-dessous illustre deux déclarations simples de fonction :
char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;
Déclaration de fonctions retournant des pointeurs vers des fonctions
Il est recommandé d'utiliser typedef pour déclarer un alias pour le type de pointeur fonction si vous déclarez une fonction qui retourne un type de pointeur fonction. Exemple :
typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer
Si vous ne procédez pas ainsi, la syntaxe appropriée pour la déclaration de fonction peut être déduite de la syntaxe des déclarateurs pour le pointeur fonction, en remplaçant l'identificateur (fp dans l'exemple ci-dessus) par la liste de noms et d'arguments de fonctions, comme suit :
int (*myFunction(char* s))(int);
La déclaration précédente est équivalente à la déclaration utilisant typedef ci-dessus.