Maison  >  Article  >  développement back-end  >  `widget w(gadget(), doodad());` est-il une déclaration de variable ou une déclaration de fonction en C ?

`widget w(gadget(), doodad());` est-il une déclaration de variable ou une déclaration de fonction en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-19 08:43:03683parcourir

Is `widget w(gadget(), doodad());` a Variable Declaration or a Function Declaration in C  ?

L'analyse la plus vexante de C : dévoiler le mystère des déclarations de fonction

Tout en comprenant la syntaxe du widget w(); est simple, de nombreux programmeurs ont du mal à comprendre comment le fragment de code suivant représente une déclaration de fonction :

widget w( gadget(), doodad() ); // pitfall: not a variable declaration

Pour percer ce mystère, il est crucial de se plonger dans les règles de désintégration de C . Dans les déclarations de fonction, les arguments des types tableau dégénèrent en pointeurs pointant vers le premier élément, tandis que les arguments des types fonction se transforment en pointeurs de fonction.

En appliquant ce principe, le code susmentionné se transmue en la signature suivante :

widget w( gadget(*)(), doodad(*)() );

Cela indique une fonction qui accepte deux arguments : un pointeur vers une fonction qui ne prend aucun argument et renvoie un type de gadget, et un pointeur vers une fonction qui prend également zéro argument et renvoie un type de gadget. La fonction elle-même renvoie un widget.

Les complexités ne s'arrêtent pas là. Considérez cet exemple déroutant :

widget w(gadget(x));

Comment cela peut-il être une déclaration de fonction étant donné que x est une variable ?

En C , il est permis d'inclure des parenthèses supplémentaires lors de la déclaration de variables, telles que gadget x ; et gadget (x);. Cela s'applique également aux arguments de fonction, permettant au code ci-dessus d'être interprété comme une déclaration de fonction qui prend un argument nommé x de type gadget et renvoie un widget.

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