Чтобы не было разночтений, делать надо так:
Код
#define G_PAGE_SIZE_HI 169
#define R_PAGE_SIZE_HI 85
#define B_PAGE_SIZE_HI 85
#define FULL_FRAME_HC (G_PAGE_SIZE_HI + R_PAGE_SIZE_HI + B_PAGE_SIZE_HI)
#define FULL_FRAME (FULL_FRAME_HC << 9)
#define Y_SIZE (FULL_FRAME >> 1)
Цитата(KAlex @ Jun 8 2012, 16:41)

ЗЫ. Под отладчиком значение константы показывается правильное.
Подозреваю, что отладчик не совсем верно интерпретирует макросы. Макросы - это текстовые подстановки, со всеми вытекающими феерическими последствиями при их неправильном применении. Отсюда и требование ставить скобки в макросах.
Цитата(KAlex @ Jun 8 2012, 16:50)

Но почему только когда я вычитаю константу такая фигня происходит?
memory_cap *= Y_SIZE; - вот это работает правильно, несмотря на отсутствие скобок.
У операций '-' и '*=' разные приоритеты. Поэтому и
неправильно применённые макросы дают любопытные результаты. Распишите полностью результат текстовой подстановки препроцессора (или просто посмотрите в листинг препроцессора) и сделайте вычисления руками с полным учётом приоритетов операций. Впечатления останутся надолго.