Udostępnij za pośrednictwem


Nowe typy danych

Wprowadzono trzy klasy typów danych dla 64-bitowego systemu Windows: typy danych o stałej precyzji, typy precyzji wskaźnika i określone typy precyzji wskaźnika. Te typy zostały dodane do środowiska deweloperskiego, aby umożliwić deweloperom przygotowanie się do 64-bitowego systemu Windows. Te typy pochodzą z podstawowej liczby całkowitej języka C i typów długich. W związku z tym można używać tych typów danych w kodzie, który kompilujesz i testujesz na 32-bitowym systemie Windows, a następnie ponownie kompilować przy użyciu kompilatora 64-bitowego, kiedy programujesz dla 64-bitowego systemu Windows.

Nawet w przypadku aplikacji przeznaczonych tylko dla 32-bitowych systemów Windows wdrożenie tych nowych typów danych sprawia, że kod jest bardziej niezawodny. Aby użyć tych typów danych, należy przeskanować kod pod kątem potencjalnie niebezpiecznego użycia wskaźnika, polimorfizmu i definicji danych. Na przykład gdy zmienna ma typ ULONG_PTR, jest jasne, że będzie używana do rzutowania wskaźników dla operacji arytmetycznych lub polimorfizmu. Nie można wskazać takiego użycia bezpośrednio przy użyciu starszych typów danych. (Można to zrobić pośrednio przy użyciu nazewnictwa typów pochodnych lub notacji węgierskiej, ale obie techniki są podatne na błędy).

Wszystkie te typy danych są deklarowane w pliku BaseTsd.h. Aby uzyskać więcej informacji, w tym definicje tych typów danych, zobacz Typy danych systemu Windows.

Stała precyzja

Typy danych o stałej precyzji mają taką samą długość zarówno w 32-, jak i 64-bitowych systemach Windows. Aby to ułatwić zapamiętanie, ich precyzja jest częścią nazwy typu danych. Poniżej przedstawiono typy danych o stałej precyzji.

Termin Opis
DWORD32
32-bitowa liczba całkowita bez znaku
DWORD64
64-bitowa liczba całkowita bez znaku
INT32
32-bitowa liczba całkowita ze znakiem bitowym
INT64
64-bitowa liczba całkowita ze znakiem
LONG32
32-bitowa liczba całkowita ze znakiem
LONG64
64-bitowa liczba całkowita ze znakiem
UINT32
Niepodpisane INT32
UINT64
Typ niesygnowany INT64
ULONG32
Niepodpisane LONG32
ULONG64
Niepodpisane LONG64

Precyzja wskaźnika

Ponieważ precyzja wskaźnika zmienia się (to znaczy, gdy staje się 32 bity w 32-bitowych systemach Windows i 64 bity w 64-bitowych), typy danych precyzji wskaźnika odzwierciedlają tę precyzję. W związku z tym można bezpiecznie rzutować wskaźnik na jeden z tych typów podczas wykonywania arytmetyki wskaźnika; jeśli precyzja wskaźnika wynosi 64 bity, typ ma 64 bity. Typy liczników odzwierciedlają również maksymalny rozmiar, do którego może odwoływać się wskaźnik. Poniżej przedstawiono typy precyzji wskaźnika i typy liczników.

Termin Opis
DWORD_PTR
Niepodpisany długi typ dla precyzji wskaźnika.
HALF_PTR
Połowa rozmiaru wskaźnika. Użyj w strukturze zawierającej wskaźnik i dwa małe pola.
INT_PTR
Typ liczby całkowitej ze znakiem dopasowany do precyzji wskaźnika.
LONG_PTR
Znakowy typ long dla precyzji wskaźnika.
SIZE_T
Maksymalna liczba bajtów, do których może odwoływać się wskaźnik. Użyj liczby, która musi obejmować pełny zakres wskaźnika.
SSIZE_T
Podpisany SIZE_T.
UHALF_PTR
Niepodpisane HALF_PTR.
UINT_PTR
Niepodpisany INT_PTR.
ULONG_PTR
Niepodpisane LONG_PTR.

Określone typy Pointer-Precision

Następujące nowe typy wskaźników explicite określają rozmiar wskaźnika. Należy zachować ostrożność podczas używania wskaźników w 64-bitowym kodzie: w przypadku deklarowania wskaźnika przy użyciu typu 32-bitowego system operacyjny tworzy wskaźnik, obcinając wskaźnik 64-bitowy. (Wszystkie wskaźniki to 64 bity w 64-bitowym systemie Windows).

Termin Opis
POINTER_32
Wskaźnik 32-bitowy. W 32-bitowym systemie Windows jest to natywny wskaźnik. W 64-bitowym systemie Windows jest to skrócony wskaźnik 64-bitowy.
POINTER_64
Wskaźnik 64-bitowy. W 64-bitowym systemie Windows jest to natywny wskaźnik. W 32-bitowym systemie Windows jest to znakowo rozszerzony wskaźnik 32-bitowy.
Należy pamiętać, że nie można bezpiecznie zakładać stanu najbardziej znaczącego bitu wskaźnika.