e11.c

unsigned chr/shortに-1を代入してはダメ


修正前 その1 unsigned char ucharV ; ucharV = -1 ; if(ucharV == -1) /* 成り立たない */
修正例1 if(ucharV == ((unsigned char)(-1)))
修正例2 ucharV = 0xff ; if(ucharV == 0xff)

修正前 その2 typedef unsigned short WORD; #define NG (-1) WORD func(void) { return NG ; }
修正例 #define NG (-1) int func(void) { return NG ; }

解説 -1を代入したのだから、-1と等しくなりそうですが、 ucharV は 0~255の値しかとらず、 -1と等しくなる事はありません。 修正例1 の様にキャストする方法もありますが、 修正例2 の様にucharV = 0xffとする方が、自然です。