上に戻る
1 /************************************************************************/
2 /******* *********/
3 /******* 1章. register char counterは危険 *********/
4 /******* 初版 NEC通信システム *********/
5 /************************************************************************/
6 #include "common.h"
7 /*------------------------------------------------------*/
8 /* 1.1 問題の基本型: 代入した値が入らない */
9 /*------------------------------------------------------*/
10 static void basicsCharErr(void)
11 {
12 unsigned char uc ;
13 char c1 ;
14 char c2 ;
15 /************************************************/
16 uc = -1 ; /* unsigned char に -1 を代入すると255になります*/
17 c1 = 0xFF ; /* signed char に FF を代入すると -1になります*/
18 c2 = 256 ; /* char に256 を代入すると 0になります*/
19 /************************************************/
20 printf("unsigned char に -1 を代入すると %d¥n",uc) ;
21 printf(" signed char に FF を代入すると %d¥n",c1) ;
22 printf(" char に256 を代入すると %d¥n",c2) ;
23 }
上に戻る
24 /*------------------------------------------------------*/
25 /* 1.2 隠された問題: 予期した比較が成立しない */
26 /*------------------------------------------------------*/
27 static void maskedCharErr(void)
28 {
29 #define ERR (-1)
30 b_ubyte ret ;
31 unsigned char u1 = -1 ;
32 unsigned char u2 = 256 ;
33 /********************************************/
34 /* 確かに代入したはずの値と等しくならない */
35 /********************************************/
36 ret = ERR ;
37 if(ret== ERR) {
38 printf("来ません。¥n") ;
39 } else {
40 printf("ret=%dとERR=%dは等しくありません¥n",ret,ERR) ;
41 }
42 /****************************/
43 /* 意味の無いチェック */
44 /****************************/
45 if((0 <= u1 && u1 <= 255) ||
46 (0 <= u2 && u2 <= 255)) {
47 printf("この2行にわたる、 ¥n") ;
48 printf("やや複雑なif文は実は意味がありません。 ¥n") ;
49 printf("ここには常時来ます。 ¥n") ;
50 }
51 }
上に戻る