Utilisation des noms de fonction comme pointeurs de fonction
Le document de justification du C90 donne un aperçu du choix de conception consistant à assimiler les noms de fonction aux pointeurs de fonction. Cette commodité simplifie l'utilisation des pointeurs de fonction dans des contextes spécifiques.
Déclarations de fonction
Considérez les déclarations :
int f(); int (*pf)();
Appels de fonction
Tous les appels de fonction valides express suivants :
(&f)(); f(); (*f)(); (**f)(); (***f)(); pf(); (*pf)(); (**pf)(); (***pf)();
La première expression de chaque ligne a été abordée précédemment. La seconde est conventionnelle. Les expressions suivantes impliquent une conversion implicite du désignateur de fonction en valeur de pointeur dans la plupart des contextes.
Justification de la conception
Le comité n'a vu aucun inconvénient majeur à autoriser ces formulaires et a considéré les interdisant comme effort excessif. Ainsi, l'équivalence entre les désignateurs de fonction et les pointeurs de fonction offre une commodité dans l'utilisation du pointeur.
Conversion implicite
Une autre observation intéressante est la conversion implicite des types de fonctions en pointeurs lorsqu'ils sont utilisés. comme paramètres mais pas comme types de retour :
typedef bool FunctionType(int); void g(FunctionType); // Implicitly converts to void g(FunctionType *) FunctionType h(); // Error FunctionType *j(); // Returns a function pointer with the type bool(int)
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3