digitalmars.D - Re: dmd warning request: warn for bitwise OR in conditional
- Daniel Murphy <yebbliesnospam gmail.com> Jan 22 2010
bearophile Wrote:Ali:We've been bitten by the following bug recently in C code: uint flag = 0x1; uint flags; if (flags | flag) { dout.writefln("oops"); } The programmer intended &. It is (almost?) always an error to use | in a conditional.
Why do you think it's almost always an error? I have seen more than one time a related bug in C code (once written by me and other times written by other people): if (foo & bar) {... instead of: if (foo && bar) {... To avoid this kind of bug you can disallow integers in conditionals (requiring something like a ! or == 0 to turn an integral value in a boolean) as Java (and partially Pascal), or you can remove the && || from the language and replace them with "and" and "or", so it becomes easy to tell them apart from bitwise operators. I like the second way. Bye, bearophile
The difference between those two use cases is that (a & b) is commonly used to check if a bit has been set. (a | b) yields the same result as (a || b) when used in a conditional. Is there any valid use for (a | b) as a 'truth' value? Daniel
Jan 22 2010








Daniel Murphy <yebbliesnospam gmail.com>