Несколько лет назад HANDLES
были 16-разрядными int
с. Все дескрипторы везде в Windows были HANDLES
. Затем кто-то понял, что файл HANDLE
не совсем то же самое, что и окно HANDLE
, и если бы они были определены по-разному, скажем, как HFILE
и HWND
, то, возможно, разработчики случайно не поменяют их как много. (Однако оба они были typedef
'int
).
Позже кто-то понял, что если они были определены совершенно по-другому ... скажем как:
typedef struct _hfile {} * HFILE;
typedef struct _hwnd {} * HWND;
тогда сам компилятор будет жаловаться, если вы используете один вместо другого, даже если в действительности каждый из них будет просто старым 16-битным (в конечном итоге 32-битным) int
значением.