L'éditeur PHP Zimo vous présente la déclaration directe des types de fonctions en langage C. En langage C, la déclaration directe d'un type de fonction est un moyen de déclarer une fonction sans la définir. Avec les déclarations avancées, nous permettons au compilateur de reconnaître et d'utiliser ces fonctions dans le code ultérieur sans avoir à les définir à l'avance. Ceci est très utile pour résoudre le problème des fonctions qui s'appellent entre elles, en particulier lors de l'écriture de programmes volumineux. En utilisant des déclarations directes de types de fonctions, nous pouvons améliorer la lisibilité et la maintenabilité du code et rendre le code plus modulaire et structuré. Examinons de plus près cette fonctionnalité importante du langage C.
Je souhaite déclarer un type de fonction récursive (déclarant une fonction d'elle-même) en C.
Avec un langage comme Go, je peux faire :
<code>type F func() F func foo() F { return foo } </code>
Si j'essaye de faire la même chose en C :
typedef (*F)(F());
Je reçois l'erreur suivante de GCC :
main.c:1:14: error: unknown type name ‘F’ 1 | typedef (*F)(F());
Cela a du sens puisque F n'existe pas lorsqu'il est utilisé. La déclaration directe peut résoudre ce problème, comment déclarer le type de fonction en avant en C ?
C ne prend pas en charge les définitions de types récursifs.
Exception : vous pouvez utiliser un pointeur vers un type de structure qui n'a pas encore été déclaré, afin que le type de structure puisse contenir un pointeur vers une structure du type de structure en cours de déclaration.
De plus, vous pouvez apparemment utiliser un type struct non déclaré comme valeur de retour d'une fonction. C'est donc proche de ce que vous souhaitez :
// This effectively gives us // typedef struct { F *f } F( void ); typedef struct S S; typedef S F( void ); struct S { F *f; }; S foo() { return (S){ foo }; } int main( void ) { F *f = foo; printf( "%p\n", (void*)f ); f = f().f; printf( "%p\n", (void*)f ); }
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!