"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-23
Parcourir:612

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

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)
Dernier tutoriel Plus>

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