Maison > développement back-end > C++ > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-12 03:22:02
original
923 Les gens l'ont consulté

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)();
Copier après la connexion

Appels de fonction

Toutes les fonctions valides expresses suivantes appels :

(&f)();
f();
(*f)();
(**f)();
(***f)();

pf();
(*pf)();
(**pf)();
(***pf)();
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal