Maison >développement back-end >C++ >Pourquoi les noms de fonctions peuvent-ils être utilisés comme pointeurs de fonction dans C90 ?

Pourquoi les noms de fonctions peuvent-ils être utilisés comme pointeurs de fonction dans C90 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-12 03:22:021033parcourir

Why Can Function Names Be Used as Function Pointers in C90?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn