On Tue, Apr 19, 2005 at 03:28:07PM +0200, Etienne Lorrain wrote:

> > #define OPTION1 0x0001
> > #define OPTION2 0x0002
> > #define OPTION3 0x0004
> > #define OPTION4 0x0008
> > #define CONFIGURATION (OPTION1 | OPTION3)
> > // There is the problem: the "== 0" is ignored
> > #if CONFIGURATION & OPTION2 == 0

On Tue, Apr 19, 2005 at 09:33:44AM -0400, Daniel Jacobowitz wrote:
> That's #if (1 | 4) & (2 == 0).  2 != 0, so 5&0 == 0.

Yes, the fact that the bitwise binary operators have a lower
precedence than the relational operators is probably the biggest
botch in C and its derivative languages; I've been C-ing for 20
years, and I still make these kinds of errors from time to time.

GCC has the "suggest parentheses" warning elsewhere (to catch people
writing "if (foo = 0)" and the like; maybe there should be a warning
for this one as well.

Reply via email to