Ben Pfaff wrote:
> >> > +        unsigned char b = (unsigned char) needle[i - 1];
> >> > ...
> >> > +            if (b == (unsigned char) needle[j])
> >>
> >> Would it be cleaner to declare 'b' to be of type 'char' and avoid the
> >> casts?
> >
> > No; ISO C 99 section 7.21.4 says that when byte strings are compared the
> > elements are considered as 'unsigned char' values.
> 
> The first cast to unsigned char quoted above seems to be
> unnecessary: assigning a value to an object of type unsigned char
> will implicitly convert it to unsigned char.

The answer was already in the mail to which you replied:

  Why risk bugs when the approach is very simple: after fetching
  any 'char' from any of the strings, cast it to 'unsigned char'.
  Simple rule, simple to remember, works fine.

When you omit the cast, the next person who does a refactoring of the code
and who was not aware that you were relying on implicit conversions will
introduce a bug.

Code maintainability is about clearly expressing the code's intent. Either
in comments or - here - through seemingly redundant casts.

Bruno


Reply via email to