Macros 宏意外地重新定义

Macros 宏意外地重新定义,macros,c-preprocessor,Macros,C Preprocessor,我有以下资料: #define PAD ( 4 - ( (WIDTH*BPP)%4 ) ) #if PAD == 4 #define PAD 0 #endif 即使在第一次定义后PAD等于3,也会重新定义PAD。但是,如果我显式地将它定义为3,那么它就不会被重新定义。因此,我假设我编写表达式的方式有问题,但我不确定是什么。您想要的是 (PAD + (WIDTH * BPP)) % 4 == 0 对吧??(当然0WIDTH和BPP的定义是什么?如果您从未指定它们,那么预处理器会将它们视为零

我有以下资料:

#define PAD (  4 - ( (WIDTH*BPP)%4 )  )
#if PAD == 4
#define PAD 0
#endif
即使在第一次定义后PAD等于3,也会重新定义PAD。但是,如果我显式地将它定义为3,那么它就不会被重新定义。因此,我假设我编写表达式的方式有问题,但我不确定是什么。

您想要的是

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

对吧??(当然
0
WIDTH
BPP
的定义是什么?如果您从未指定它们,那么预处理器会将它们视为零。您如何知道
PAD
在第一个
#define
之后是3?如果您要重新定义它,您需要在
#define PAD 0
之前使用
#unde PAD
。)我是个白痴!BPP是在PAD之后定义的。谢谢
#define PAD (3 - ((WIDTH * BPP + 3) % 4))
>>> 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))