Signed-unsigned comparisons in Phobos

Jonathan M Davis jmdavisProg at gmx.com
Fri Aug 12 08:52:11 PDT 2011


On Friday, August 12, 2011 12:39:01 Don wrote:
> kennytm wrote:
> > Don <nospam at nospam.com> wrote:
> >> I've had a look at a dozen or so of these, and they were all real. I
> >> didn't see any which require a cast to "make the compiler shut up".
> >> That's pretty impressive. In C++ I find that such messages are nearly
> >> always false positives.
> >> 
> >> The one case where it's a bit annoying is this:
> >> 
> >> int [] x = new int[6]; // or x = some array literal.
> >> for (int i = 0; i < x.length; ++i) {...}
> >> 
> >> Here is a suggestion for how we could eliminate such false positives.
> >> http://d.puremagic.com/issues/show_bug.cgi?id=6478
> > 
> > Doesn't this require flow analysis?
> 
> Yes. See the bug report.
> 
> > And the type of index 'i' should be 'size_t' anyway.
> 
> Why? It will only ever be in the range 0..6.

Sure. it works in this case, but in the general case it's good practice to use 
size_t for indices, because that's the actual type of the index, so it won't 
have signedness or range problems. Unfortunately, it's a practice that many 
people don't seem to follow (in both C/C++ and D), since it's so natural to 
use int (or auto in D), but I'd definitely argue that programmers should 
normally be using size_t for indices.

- Jonathan M Davis


More information about the Digitalmars-d mailing list