Не мог бы кто-нибудь указать, почему были определены следующие 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
?