上に戻る
1       /************************************************************************/
2       /*******							*********/
3       /*******	4章.	演算子に注意				*********/
4       /*******				初版	NEC通信システム	*********/			
5       /************************************************************************/
6       struct	tag	{
7       	int	bit1:1		;
8       	int	neverON ;

/* 1/11 警告01/02: A:e309: 短すぎる外部変数、static化、長名化できませんか? s:} s ; %%%*/

9 } s ;

上に戻る

/* 2/11 警告01/01: A:e25: 未使用引数を削除するか、【dmy】に名前変更出来ませんか。operators(argv){}:operators.c %%%*/

10 void operators(int argc,char *argv[])

11 {

/* 3/11 警告02/02: A:e40: 正常時のみ考慮された変数。異常時処理は大丈夫?: i: operators.c %%%*/

12 int i ;

13 int ret ; 14 15 /************************/ 16 /* 4.1. C言語入門 */ 17 /************************/ 18 char buf[10] ;

/* 4/11 警告01/01: A:e3: BUGです。配列の添字> 9: 10では大き過ぎます:buf[10] = 0 ; %%%*/

19 buf[10] = 0 ; /* buf[9]までしか使用できません */

/* 5/11 警告02/03: A:e2: BUG?,初期設定前のゴミ値使用してませんか C-FAQ 1.30: i: i %%%*/

20 buf[i++] = i ; /* 標準規格外、K&R2 2.12参照 */

/* 6/11 警告03/03: A:e2: BUG?,初期設定前のゴミ値使用してませんか C-FAQ 1.30: ret: ret %%%*/

21 ret <<= 32 ; /* シフトしすぎです */

/* 7/11 警告01/01: A:e16: BUGです。==では無意味です:ret == 0 ; %%%*/

22 ret == 0 ;

/* 8/11 警告01/02: A:e15: BUGです。if(変数=定数):if(ret = 0) { %%%*/

23 if(ret = 0) {

24 printf("C-FAQ 17.4参照¥n") ; 25 } 26 27 /********************************************************/ 28 /* 4.2. hundredがNGと等しか否かの結果がretに入ります。 */ 29 /********************************************************/ 30 #define NG (-1) 31 #define hundred() 100 /* 百 */

/* 9/11 警告01/02: A:e15: 『a=b==c』は『a=(b==c)』となり『(a=b)==c』とはaの値が違う:if(ret = hundred() != NG) { %%%*/

32 if(ret = hundred() != NG) {

33 printf("百を期待しても結果は壱です %d¥n",ret) ; 34 } 35 ret = 2 ;

/*10/11 警告01/01: A:e37: BUGです。『x&2==2』は『x&(2==2)』となり『(x&2)==2』とは別です:& 2 == 2) { %%%*/

36 if(ret & 2 == 2) {

37 ; 38 } else { 39 printf("『ret & (2 == 2)』¥n") ; 40 printf("『ret & (1)』¥n") ; 41 printf("『ret & 1』¥n") ; 42 } 43 /************************/ 44 /* 4.3. 0bitは立ちません */ 45 /************************/ 46 #define bit0 0 /* 構造体の絵が0~31bitなので */ 47 s.neverON = bit0 ; /* 0bitを立てる人多し */

/*11/11 警告01/01: A:e39: 『a |= 0』『a += 0』では意味がありません:|= bit0 ; %%%*/

48 s.neverON |= bit0 ; /* マクロ定義のため、検出困難 */

49 printf("0bitはは立ちません s.neverON=%d¥n",s.neverON) ; 50 51 /************************************************/ 52 /* 4.4. ANSI-Cでは0か-1にしかなりません */ 53 /************************************************/ 54 s.bit1 = 1 ; 55 printf("1を代入してもマイナス壱Ⅰ s.bit1=%d¥n",s.bit1) ; 56 } 上に戻る