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

Pourquoi les noms de fonctions sont-ils équivalents aux pointeurs de fonction avec l'adresse de l'opérateur en C ?

Patricia Arquette
Libérer: 2024-11-15 07:27:02
original
633 Les gens l'ont consulté

Why are Function Names Equivalent to Function Pointers with the Address-of Operator in C?

Pourquoi le nom de fonction est-il équivalent au pointeur de fonction avec l'adresse de l'opérateur ?

En programmation C, utiliser un nom de fonction comme pointeur de fonction équivaut à appliquer l’opérateur d’adresse de (&) au nom de la fonction. Cette apparente incohérence avec d'autres éléments du langage, tels que les tableaux, a une justification spécifique.

Raison d'être de l'équivalence du nom de fonction

Selon le document ANSI C90 Justification, l'équivalence entre les désignateurs de fonction (noms de fonction) et les pointeurs de fonction a été introduit pour améliorer la commodité. En autorisant les deux notations, le langage fournit un moyen abrégé d'appeler des fonctions membres dans des structures packagées. Par exemple :

graphics.open(file) // Equivalent to (*graphics.open)(file)
Copier après la connexion

Curiosités des désignateurs de fonctions

Cette équivalence conduit à des formes syntaxiques particulières mais valides :

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

Le Comité a raisonné qu'interdire des formulaires comme (f)() tout en autorisant a (pour int a[]) aurait été inutile et peu pratique.

Exceptions dans les types de paramètres et de retour

Fait intéressant, un type de fonction peut être implicitement converti en un pointeur vers lui-même en tant que paramètre (par exemple, void g(FunctionType)). Cependant, il ne peut pas être converti en pointeur lorsqu'il est utilisé comme type de retour (par exemple, FunctionType h();). Cette distinction garantit que les problèmes de compatibilité des types de fonctions sont évités.

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