bash.im ithappens.me zadolba.li
9574

WM_WHY?

16 июля 2012, 07:45

В 1996 году мы с одногруппником, изучая Windows API, писали тестовые программы. Использовали предшественника C++ Builder — компилятор Borland C++ 5.0. И хотя компиляторы Borland всегда были очень шустры, на слабых машинах из-за огромного windows.h даже «Hello World!» собирался полминуты.

Мой одногруппник решил «оптимизировать» свою программу, заменив все макросы из windows.h на числовые значения: вместо WM_COMMAND в цикл сообщений вставил число 0111h, вместо WM_TIMER — 0113h, а вместо WM_CREATE — 0001h. Логика была простой: константы никогда не поменяются, значит, можно их и вбить, чтобы компилятор не трудился.

В результате программа стала совершенно нечитаемой, но скорость компиляции совершенно не возросла, ведь всё равно в программе нужно было оставить строку #include <windows.h>. Поэтому пришлось вернуть всё обратно. Конечно, мы догадались, зачем нужны эти «дурацкие» #define.

Потом я много раз встречался с казавшимися мне странными, смешными и дурацкими решениями в API, библиотеках, программах. И чаще всего для них через некоторое время обнаруживалось совершенно разумное, рациональное объяснение, хотя и зачастую безнадёжно устаревшее.