Maison  >  Article  >  développement back-end  >  Pourquoi les noms de fonctions sont-ils utilisés comme pointeurs de fonction en C ?

Pourquoi les noms de fonctions sont-ils utilisés comme pointeurs de fonction en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-11 02:29:03404parcourir

Why are Function Names Used as Function Pointers in C?

Noms de fonction comme pointeurs de fonction : une justification de conception

En C, utiliser des noms de fonction comme pointeurs de fonction équivaut à appliquer l'adresse de opérateur au nom de la fonction. Ce comportement peut sembler incohérent avec d'autres parties du langage et soulève des questions sur sa justification de conception.

Le document ANSI C90 Justification fournit un aperçu de cette décision de conception :

  1. Commodité : Cela simplifie l'appel de fonctions qui font partie d'une structure plus large. Par exemple, au lieu d'écrire (*graphics.open)(file), les développeurs peuvent utiliser le plus concis graphiques.open(file).
  2. Flexibilité syntaxique : L'équivalence entre les désignateurs de fonction et les pointeurs permettent diverses formes syntaxiques pour appeler des fonctions :
(&f)();        // Explicit address-of operator
f();            // Implicit conversion to function pointer
(*f)();        // Deference of a function pointer
(**f)();       // Deference twice
(***f)();      // Deference three times
  1. Cohérence avec les pointeurs vers Noms des tableaux : Bien que le langage interdise d'attribuer &a à un int* où a est un tableau, il autorise la même opération pour les désignateurs de fonction et les pointeurs de fonction. Cette asymétrie a été considérée comme moins préjudiciable que d'interdire l'utilisation de désignateurs de fonction comme pointeurs.

Concernant l'absence de conversion implicite du type fonction vers le type pointeur dans les contextes de retour, l'explication réside dans la notion de " décoration de type retour." En C, les types de retour de fonction font partie de la signature de la fonction et ne peuvent pas être modifiés. Ainsi, une fonction ne peut pas implicitement renvoyer un pointeur vers elle-même.

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