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