Maison >développement back-end >C++ >Pourquoi les noms de fonctions sont-ils équivalents aux pointeurs de fonction en 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!