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
右ですか? (もちろん、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
(私は否定的なケースをチェックしませんでしたが)
'WIDTH'と' BPP'は何と定義されていますか?指定しなかった場合は、プリプロセッサによってゼロとして扱われます。最初の '#define'の後に' PAD'が3であることをどのように知っていますか?再定義する場合は、 '#define PAD 0'の前に' #undef PAD'が必要です。 –
私はばかです! BPPはPAD後に定義された。ありがとう – linitbuff