Try
#define CLR_BIT(p,n) ((p) &= ~((1) << (n)))
However for various reasons of general macro evil I would advise not using a macro. Use an inline function and pass by reference, something like this:
static inline void set_bit(long *x, int bitNum) {
*x |= (1L << bitNum);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…