Грохнул старый журнал, не было там ничего, чтоб продолжать, а тут уже буду теперь ваять, что на ум придёт.
И первый пост выйдет немного неоднозначным. Многие любят хаять Майкрософт, я таким не страдал, но не далее как вчера, столкнулся с очень "приятным моментом" VS 2005.
Понадобилось мне сделать нечто типа:
#define SOME_OFFSET 700
#define MAGIC_ID 5
...
#define IDR_MY_MENU_BAR 1
#define IDR_MY_ANOTHER_MENU (IDR_MY_MENU_BAR + (SOME_OFFSET * MAGIC_ID))
Аналогичные вещи для ресурсов-строчек - прокатывает без проблем, а для меню - нет. После пляски с бубном оказалось, что скомпилируется всё это чудо только в виде #define IDR_MY_ANOTHER_MENU (IDR_MY_MENU_BAR+(SOME_OFFSET*MAGIC_ID)), НО! такой ресурс не подгрузить и, посмотрев вьювером ресурсов exe-файлик, я понял почему: ID такого ресурса выглядит как (1+(700*5)), т.е. препроцессор мало того, что не умеет нормально парсать строчки с пробелами, так еще и не проверяет ID на предмет того, что оные являются чем-либо отличным от числа. . .
Я бы смог понять, если бы такой код не работал вообще, но почему он срабатывает для строковых ресурсов, но не для меню... В общем, если кто кинет в меня докой, где о таком можно прочесть - было бы здорово.