2

ポインター データ型と非ポインター データ型の別々のモデルを作成するという意識的な決定として、Microsoft は一連のデータ型を考え出しました。これはint、 , __int64, long(両方signedunsignedバージョン) のような POD ではなく、それらを使用することが強く推奨されました。

現在のモデル Microsoft はIL32P64、ポインターの切り捨てに対して脆弱な整数型へのポインターのすべての C 型キャストを強制するものです。これにより、彼らは _PTR 型を考え出すことを余儀なくされました。のような有効な整数型 (符号なし) や のような非 POD 型のそれぞれlongについてint、同等の表記法,DWORDを思いつきました。DWORD_PTRINT_PTR

typedef のチェーンを解決すると、これらすべての型は次の定義に要約されます。

#if defined(_WIN64)
 typedef unsigned __int64 ULONG_PTR;
#else
 typedef unsigned long ULONG_PTR;
#endif

#if defined(_WIN64)
 typedef unsigned __int64 LONG_PTR;
#else
 typedef unsigned long LONG_PTR;
#endif 

私が知りたいのは、すべてで使用される単一の型を作成するのではなく、整数型と非 POD の同等物ごとに異なる型定義を作成する理由です (1 つだけINT_PTRと言うUINT_PTR)

では、なぜ知りたいのでしょうか。

常に MS プラットフォームを使用している場合、MS が何を考え出すかについて問題になることはめったにありません。コードがポリプラットフォームである場合に問題が発生します。コードを移植可能にするには、*nix と同等の型を定義する必要があります。

XI64_PTR以前のタイプが何であったかにXU64_PTR関係なく、同等の定義を持つ2つのポインタータイプのみを作成し、それを使用することを計画していました。

4

0 に答える 0