0
我有以下幾點:宏意外重新
#define PAD ( 4 - ((WIDTH*BPP)%4) )
#if PAD == 4
#define PAD 0
#endif
和PAD進行了重新定義,即使是第一次定義後等於3。但是,如果我明確地將其定義爲3,那麼它不會被重新定義。因此,我認爲我寫這個表達方式存在問題,但我不確定是什麼。
我有以下幾點:宏意外重新
#define PAD ( 4 - ((WIDTH*BPP)%4) )
#if PAD == 4
#define PAD 0
#endif
和PAD進行了重新定義,即使是第一次定義後等於3。但是,如果我明確地將其定義爲3,那麼它不會被重新定義。因此,我認爲我寫這個表達方式存在問題,但我不確定是什麼。
你想要的是
(PAD + (WIDTH * BPP)) % 4 == 0
吧?
然後就可以以這種方式限定PAD
(當然0 <= PAD < 4
OF):
#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
(雖然我沒有檢查負面情況......)
什麼是WIDTH和BPP定義爲?如果你從未指定它們,那麼它們被預處理器視爲零。你怎麼知道第一個'#define'後的'PAD'是3?如果你要重新定義它,你需要'#define PAD 0'前面的'#undef PAD'。 – 2012-03-11 04:07:31
我是個白癡! BPP是在PAD之後定義的。謝謝 – linitbuff 2012-03-11 04:10:15