Макрос неожиданно переопределен - PullRequest
0 голосов
/ 11 марта 2012

У меня есть следующее:

#define PAD (  4 - ( (WIDTH*BPP)%4 )  )
#if PAD == 4
#define PAD 0
#endif

и PAD переопределяется, даже если оно равно 3 после первого определения.Однако, если я определю это как 3, он не будет переопределен.Поэтому я предполагаю, что есть проблема с тем, как я написал выражение, но я не уверен, что.

1 Ответ

0 голосов
/ 11 марта 2012

То, что вы хотите, это

(PAD + (WIDTH * BPP)) % 4 == 0

правильно? (Конечно 0 <= PAD < 4)

Тогда вы можете определить PAD следующим образом:

#define PAD (3 - ((WIDTH * BPP + 3) % 4))

Пример сеанса Python:

>>> def f(x): return 3 - (x+3)%4
...
>>> [ (x, f(x), x + f(x)) for x in xrange(100,108) ]
[(100, 0, 100), (101, 3, 104), (102, 2, 104), (103, 1, 104), (104, 0, 104), (105, 3, 108), (106, 2, 108), (107, 1, 108)]

В общем

#define PAD ((N-1) - (X + (N-1)) % N))

делает PAD + X кратным N с ограничением 0 <= PAD < N (хотя я не проверял отрицательные случаи ...)

...