WT-2677 chased a problem where a 'char' declaration is interpreted as signed on some platforms (like Solaris), but is unsigned on others. The signed interpretation did a sign extension of a char argument to give an invalid input to isprint(), which was undetected on the other platforms. This seems somewhat dangerous. There are only a handful of places where a char (without an explicit signed/unsigned) is used in WT. If we removed these and enforced this policy, errors of this nature would be reduced.
It seems unlikely we could entirely remove the problem, consider:
void foo(const char *p)
Unknown macro: { return (isprint(*p)); }
Getting rid of char * would be impossible.