Другие языки программирования и технологии

Зачем в библиотеке Windows.h базовые типы имеют так много синонимов?

Не только совместимость, но ещё и гибкость. Мало-ли завтра Microsoft в данном случае (+возможно не без участия Intel/AMD ;) придет в голову, что int у нас теперь 128бит а handle (который вроде был тоже как int) - остался старого размера. Хотя "вроде как" они синонимы были.

Естественно это может вызвать проблемы у любителей приводить в программах handle <-> int напрямую, но по крайней мере не у среды, где грамотно всё разделено.

Пример взят чисто гипотетический. Понятно, что в реале скорее всего в случае 128 интов будет и хэндл на 128. Но чисто для примера.
АТ
Андрей Туркин
84 764
Лучший ответ
Для "совместимости вперед". На случай, если какой-то из этих типов когда-то перестанет совпадать с базовым.
Madiiar Mukhamedzianov
Madiiar Mukhamedzianov
63 582
Попытка обеспечить строгость типов на C, которой в этом языке нет. Особенно если объявить #define STRICT.
Скажем, HANDLE и DWORD, хотя физически оба 32-разрядные, логически это разные типы и они должны быть несовместимы.
Совместимость со всем и вся типа
Потому что слишком много людей думают о совместимости одновременно. Каждый страхуется по-своему.
Поэтому и синонимы есть, и одновременно long int оставили 32 бита для совместимости со старым виндовым кодом (в других осях разрядность long-а равна разрядности программы, т. е. размеру указателя) .

Впрочем, это не значит, что с совместимостью всё будет хорошо. Вот long-и теперь в мультиплатформенном коде использовать не стоит, потому что в MS их сделали "по-своему совместимыми".
Миша Щеглов
Миша Щеглов
19 662
Синонимов чего в Windows.h много? Типов из библиотеки C++? Может быть.
Но WinAPI рассчитан на то, чтоб под него можно было и на чистом Си писать. В котором до недавнего времени даже типа bool не было! Приходилось юзать BOOL из Windows.h Так что BOOL никакой не синоним.