Windows Data Types... why so redundant/undescriptive?
Could someone please exactly why the following `typedef`s/`#define`s have been defined? What value do they have, compared to the originals?

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

    typedef ULONG_PTR DWORD_PTR;      //What's the difference?
    typedef long LONG_PTR;            //Wasn't INT_PTR enough?
    typedef unsigned __int64 DWORD64; //A 64-bit "double"-word?!

    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 LONG is "int"? what?


    typedef BYTE far *LPBYTE;         //Why not just say BYTE*?

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

    typedef ULONG_PTR SIZE_T;         //Why not just size_t?


And, best of all:

    #define VOID void

What's the reasoning behind these? Is it some sort of abstraction I'm not understanding?
Windows Data Types... why so redundant/undescriptive?
===

Could someone please exactly why the following `typedef`s/`#define`s have been defined? What value do they have, compared to the originals?

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

    typedef ULONG_PTR DWORD_PTR;      //What's the difference?
    typedef long LONG_PTR;            //Wasn't INT_PTR enough?
    typedef unsigned __int64 DWORD64; //A 64-bit "double"-word?!

    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 LONG is "int"? what?


    typedef BYTE far *LPBYTE;         //Why not just say BYTE*?

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

    typedef ULONG_PTR SIZE_T;         //Why not just size_t?


And, best of all:

    #define VOID void

What's the reasoning behind these? Is it some sort of abstraction I'm not understanding?