API Windows устарел. Действительно старый. Более старый, чем официальный стандарт С старый.
Это означает, что на начальном этапе Windows API приходилось иметь дело со всеми видами древних компиляторов Си с разными уровнями языковой поддержки. Некоторые могут не поддерживать void
. Некоторые могут иметь тип int
, который не совместим с тем, что Windows считает int
. Некоторые могут не понимать short
. В качестве обходного пути Windows API предоставляет переносимые эквиваленты в верхнем регистре, которые имеют псевдонимы для всего, что работает для этого конкретного компилятора.
Конечно, с современными компиляторами все немного успокоилось. Все поддерживают void
, например. Однако, чтобы поддерживать совместимость со старым кодом, который использует эти макросы верхнего регистра, #define
s и typedef
s должны остаться.