Utilisation des noms de fonctions comme pointeurs de fonctions
Le document de justification du C90 donne un aperçu du choix de conception consistant à assimiler les noms de fonctions aux pointeurs de fonctions. 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
Toutes les fonctions valides expresses suivantes appels :
(&f)(); f(); (*f)(); (**f)(); (***f)(); pf(); (*pf)(); (**pf)(); (***pf)();
La première expression de chaque ligne a été couverte 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 des pointeurs.
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)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!