2009-11-23 5 views
2

Qu'est-ce que cela signifie exactement?typedef _W64 non signé int UINT_PTR, * PUINT_PTR;

typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; 

Est-ce que cela signifie que * PUINT_PTR est un pointeur (évidemment) et UINT_PTR est pas un pointeur? Si oui, pourquoi s'appelle-t-on UINT_PTR? (Que je lirais comme pointeur unsigned int, ou pointeur vers unsigned int)

Merci

Répondre

7

Oui, cela signifie que PUINT_PTR est un pointeur et UINT_PTR n'est pas un pointeur. C'est un peu déroutant, mais un UINT_PTR (ainsi que le plus normalisé uintptr_t) est défini comme un entier non signé dont la taille est suffisante pour contenir une valeur de pointeur. Il est généralement utilisé pour le code délicat où les pointeurs sont mis en valeurs entières et vice-versa. L'annotation _W64 est une note du compilateur Miscrosoft qui, lors de la compilation pour une cible 64 bits, doit avoir une largeur de 64 bits au lieu de 32, car sur les plateformes 64 bits, les pointeurs sont 64 bits, mais unsigned int s sont généralement encore 32 bits. Cela garantit que sizeof(UINT_PTR) >= sizeof(void*) pour toutes les plates-formes cibles.

La deuxième déclaration déclare simplement PUINT_PTR comme pointeur vers un _W64 unsigned int, ou plus précisément un pointeur vers un UINT_PTR.

Questions connexes