Am 26.08.2011, 13:10 Uhr, schrieb bearophile <bearophileh...@lycos.com>:
Marco Leise:
Is (!x & y) an issue or is it rather people omitting spaces in their
code
!x&y ?
This topic was already discussed in past, in two threads, this one of
them:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=135741
The Coccinelle tool has found a large number of !x & y bug patterns in
already debugged high-quality C/C++ code. Search for "Correct
occurrences of !x&y" in this page:
http://coccinelle.lip6.fr/impact_linux.php
See also, a good lint catches this bug:
http://d.puremagic.com/issues/show_bug.cgi?id=5814
And once these lints complain about 1 + 2 * 3 being ambiguous I lose all
hope in mankind. But point taken, there is a provably large number of such
bugs. In fact they can be narrowed down to 'check if a flag is disabled'
as in this example: "if (!(flags & SOME_FLAG))".
It's a common mistake, it causes significant troubles, it's easy to
catch, avoiding it is cheap syntax-wise, and there is a precedent
similar case already implemented in D.
Ok, I get it.
If in the above case we are forced to write ((!x) & y) that's ... LISP.
Nope, it asks for just one pair of parentheses, like:
!(x & y)
Or:
(!x) & y
I guess "(!x) & y" is a rare case anyway. I though of "if ((!x) && y)".
Does your enhancement include other operators like '&&' or is it
practically just for the 'check if flag is disabled' case?
At least I'm not convinced by what is in the bug report.
You will have to bring on the table stronger evidence that this an
useless change, if you want to refuse the enhancement request 5409.
Walter and Don have accepted it, I think. I don't know what Andrei
thinks of it.
Bye,
bearophile