Maison > développement back-end > C++ > `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
Libérer: 2024-11-19 08:43:03
original
758 Les gens l'ont consulté

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
Copier après la connexion

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(*)() );
Copier après la connexion

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));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal