On Sun, Dec 30, 2001 at 11:09:50PM -0500, Colin Walters wrote: > On Sun, 2001-12-30 at 17:02, Julian Gilbey wrote: > > This package is correct as is, and the warning is harmless; the line > > of code involved is: > > > > return (c<0||c>255)? unexpected_char: icode[c]; > > > > where c is a char expected to be in the normal range (0<=c<=127). All > > the chars used in this code (AFAICT) are in this range. > > This still says to me there is likely a logic error in the code; if the > authors thought it was possible for c to take on a negative value at > some point, then it should be declared signed. Otherwise, why not just > declare it unsigned and remove the test for c < 0?
I believe that the author (Knuth) presumably thought "c should only be between 0 and 127, probably not even that far, and we're using c as an array index, where we've only allocated 256 chars for this array. As char might be a signed char, c could feasibly be less than 0, and there's a small possibility that char could be some weird wide character thing, so c could feasibly be greater than 255, we'll perform the checks just check to be on the safe side." Defensive programming. Julian -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Julian Gilbey, Dept of Maths, Debian GNU/Linux Developer Queen Mary, Univ. of London see http://people.debian.org/~jdg/ http://www.maths.qmul.ac.uk/~jdg/ or http://www.debian.org/ Visit http://www.thehungersite.com/ to help feed the hungry Also: http://www.helpthehungry.org/