10
votes

Que signifie cette ligne de préprocesseur C / C ++?

Ceci est la ligne 519 de winnt.h (version de la version: 0091) xxx

Pourquoi avons-nous besoin d'un pointeur sur une structure avec un seul membre avec un seul membre Un nom étrange appelé inutilisé ?

et aurons-nous jamais besoin d'utiliser une ligne de code comme celui-ci? xxx

Globalement déclarer différents types de données avec les mêmes structures, n'a pas de sens pour moi. Quelle est l'idée derrière cela? xxx


0 commentaires

3 Réponses :


1
votes

Et aurons-nous besoin d'utiliser une ligne de code comme celui-ci?
Hinstance hinstance = nouveau hinstance __;

Vous utilisez généralement une valeur hinstance renvoyée par un appel système Windows; Je n'ai jamais vu de code exécutant une ligne comme celle-là.


0 commentaires

15
votes

Le point est destiné aux différentes poignées d'avoir différents types afin que, par exemple, une hinstance ne soit pas assignée à une poignée. S'ils étaient tous définis comme "Void *", il y a des classes d'erreurs que le compilateur ne pouvait pas détecter.


3 commentaires

Donc, l'idée derrière elle est d'avoir des types de données entier qui ne seront pas utilisés à des fins autres que ce qu'ils ont été déclarés?


Oui, cela fournit une sécurité de type pour les types de poignée afin d'obtenir une erreur lorsque vous essayez de passer une hinstance à une fonction nécessitant une poignée, même si la structure sous-jacente est identique. (Cette réponse allait être juste "oui", mais cela n'était évidemment pas assez verbose. Verbosité supplémentaire ajoutée.)


Ahhh je vois pourquoi C n'autorise pas les structs anonymes en tant que paramètres de fonctionner maintenant; Si elle traçait des structs anonymes comme étant égales à une struct identique avec la même configuration, elle ne ferait pas de causer des erreurs de faire ce truc. Cela dit, je suis sûr que le permettant cela permettrait un code plus flexible, mais au moins il y a une raison. Il semble également indiquer qu'il existe une véritable dépendance du code sur les pointeurs étant exactement la taille de l'INT, sinon gérerait une pause et beaucoup de code devraient être réécrites.



1
votes

Ils ne soulignent rien à rien à la mémoire; Ils sont simplement utilisés pour désigner des objets (fichiers, ressources, sémaphores, fenêtres) lors de la saisie d'appels vers l'API Windows. Bien que ce ne soient rien de plus que des indexés dans les tables d'objets du noyau, les développeurs ont décidé qu'ils en font un pointeur à une structure inutilisée qui les rendrait «opaques» et causer moins de confusion entre autres types. Le deconpar_handle est une macro de fonction qui ne fait que déclarer des types opaques pour les poignées.


0 commentaires