Типы данных Windows… почему они такие избыточные / не описательные?

Не мог бы кто-нибудь указать, почему были определены следующие typedef s / #define s? Какую ценность они имеют по сравнению с оригиналами?

typedef char CHAR;
#define CONST const
typedef float FLOAT;

typedef unsigned __int64 DWORD64; //A 64-bit "double"-word?!
typedef ULONGLONG DWORDLONG;      //What's the difference?

typedef ULONG_PTR DWORD_PTR;      //What's the difference?
typedef long LONG_PTR;            //Wasn't INT_PTR enough?

typedef signed int LONG32;        //Why not "signed long"?
typedef unsigned int UINT;        //Wait.. UINT is "int", "LONG" is also int?
typedef unsigned long ULONG;      //ULONG is "long", but LONG32 is "int"? what?

typedef void *PVOID;              //Why not just say void*?
typedef void *LPVOID;             //What?!

typedef ULONG_PTR SIZE_T;         //Why not just size_t?

И, что лучше всего:

#define VOID void                 //Assuming this is useful (?), why not typedef?

Что за ними стоит? Это какая-то абстракция, которую я не понимаю?


Править :

Для тех, кто упоминает кросс-совместимость компиляторов:

Мой вопрос не о том, почему они этого не сделали » t используйте unsigned long long вместо, скажем, DWORD64 . У меня вопрос, зачем кому-то использовать DWORD64 вместо ULONG64 (или наоборот)? Разве оба этих typedef не имеют ширину 64 бита?

Или, как другой пример: даже в «гипотетическом» компилятор, который должен был обмануть нас во всех отношениях, в чем будет разница между ULONG_PTR и UINT_PTR и DWORD_PTR ? Разве все эти абстрактные типы данных не означают одно и то же - SIZE_T ?

Однако я спрашиваю, почему они использовали ULONGLONG вместо long long - существует ли какая-либо разность потенциалов, не охватываемая ни long long , ни DWORDLONG ?

17
задан Mehrdad 28 February 2011 в 16:34
поделиться