nmh-workers
[Top] [All Lists]

Re: [Nmh-workers] Compiler warnings and signed vs. unsigned char, again

2013-02-05 13:06:21
Lyndon wrote:

But to what benefit?  I.e. where is the gain in using
"unsigned char" rather than just reverting to "char"
everywhere.  This is what the C library uses for for its
string and stdio functions.

I see two broad approaches to dealing with the issue:

1) use unsigned char everywhere internally, and cast (to
   char *) arguments to string functions to prevent compiler
   warnings about unsigned char/char * mismatch, or

2) use char everywhere internally, and cast (to unsigned
   char) arguments to ctype macros to prevent incorrect sign
   extension.

"everywhere" means where we store message contents.  printf
format strings, user responses, and other really internal
uses can remain char *.

I prefer the first because 1) we deal with chars that we,
within nmh, always interpret as unsigned, and 2) if we
forget a cast of unsigned char * to char * in a call to
strcmp(), etc., there's no harm.

Though seeing the arguments, I'm OK with the second
approach.  Especially if we get the compilers to flag
missing casts.

The only time signed vs. unsigned makes a difference is if
you are using chars as itty bitty ints.  Are we doing
that?

Not that I recall but I wouldn't be surprised if some are
lurking, though I would be surprised if any of those could
contain a value >0x7f.  In any case, I agree that we should
exterminate any chars used as ints if we find them.

Switching to unsigned char means casting every parameter
to almost every str* and stdio function call.  Besides
being tedious, these casts will mask the cases where
signed vs. unsigned actually matters.  This is just bad
programming.

I don't think we have many stdio function calls that would
be affected.  And for both those and str* calls, when would
it matter they were passed an unsigned char * instead of a
char *?

And I think it's worse programming to risk incorrect
behavior if someone forgets an unsigned char cast and the
compiler doesn't warn about it.

David

_______________________________________________
Nmh-workers mailing list
Nmh-workers(_at_)nongnu(_dot_)org
https://lists.nongnu.org/mailman/listinfo/nmh-workers

<Prev in Thread] Current Thread [Next in Thread>