Maison >développement back-end >C++ >Pourquoi les noms de fonctions sont-ils équivalents aux pointeurs de fonction en C ?

Pourquoi les noms de fonctions sont-ils équivalents aux pointeurs de fonction en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 20:29:02874parcourir

Why are Function Names Equivalent to Function Pointers in C?

Nom de fonction comme pointeur de fonction : une justification de conception

L'équivalence entre l'utilisation d'un nom de fonction comme pointeur de fonction et l'application de l'adresse de L'opérateur au nom de la fonction est une curieuse conception de langage.

Justification

Selon le document ANSI C90 Justification, cette équivalence a été introduite pour améliorer la commodité des pointeurs de fonction. En permettant d'utiliser les désignateurs de fonction de manière interchangeable avec les pointeurs, les développeurs bénéficient de la flexibilité d'appeler des fonctions en utilisant la notation abrégée ou la syntaxe de pointeur plus conventionnelle.

Conversion implicite

Le langage la conception inclut également une conversion implicite entre les types de fonctions et les pointeurs de fonction lorsqu'ils sont utilisés comme paramètres. Cependant, cette conversion n'est pas applicable lorsqu'un type de fonction est utilisé comme type de retour. Ce comportement vise à empêcher les retours involontaires de pointeurs et à garantir la sécurité du type.

Exemple

Considérez le code suivant :

typedef bool (*FunType)(int);
bool f(int);
int main() {
  FunType a = f;  // Equivalent to &f
  FunType *j();  // Returns function pointer
}

Dans cet exemple, la variable a peut se voir attribuer le pointeur de fonction pour f sans utiliser l'opérateur d'adresse de. Cette syntaxe abrégée simplifie le code et le rend plus lisible.

Incohérence avec les tableaux

Bien que l'équivalence entre les noms de fonctions et les pointeurs de fonctions soit cohérente avec la façon dont les tableaux sont utilisés en C, cela introduit une certaine incohérence. Par exemple, utiliser le nom d'un tableau (a) comme pointeur (&a) n'est pas autorisé, ce qui souligne le traitement spécial accordé aux fonctions à cet égard.

Conclusion

L'équivalence entre les noms de fonctions et les pointeurs de fonction a été introduite comme une décision de conception visant à améliorer la commodité d'utilisation des pointeurs de fonction. Bien que cette approche offre de la flexibilité, elle introduit également certaines incohérences dans le comportement du langage.

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