上に戻る
1       /************************************************************************/
2       /*******							*********/
3       /*******	5章.	制御文の罠				*********/
4       /*******				初版	NEC通信システム	*********/			
5       /************************************************************************/
6       /*int/void無し*/controlFlow(void)	

/* 1/14 警告02/03: B:e35: 『int/void』と『必要ならstatic』を関数定義に追加して下さい: %%%*/

7 {

8 unsigned int j ; 9 char buf[10] ; 10 /************************/ 11 /* 5.1. switch文の罠 */ 12 /************************/

/* 2/14 警告01/02: A:e40: 正常時のみ考慮された、【遅くて符号拡張の危険があるchar】変数: i。C-FAQ1.1: controlFlow.c %%%*/

13 char i ;

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

14 switch(i) { /*

15 case 問題修正: */

/* 4/14 警告01/01: A:e33: 制御が来ません:case 問題修正: */↓ printf("問題修正の残骸 ↑これ ¥n") ; %%%*/

16 printf("問題修正の残骸 ↑これ ¥n") ;

/* 5/14 警告01/01: A:e5: BUGです。switch文内、case外のコードには制御が来ません:case 1:↓ printf("break忘れてます¥n") ; %%%*/

17 case 1:

18 printf("break忘れてます¥n") ;

/* 6/14 警告02/03: A:e12: BUGです。defaultの書き間違『defalut』か未使用ラベル:defalut :↓ deault : %%%*/

19 defalut :

/* 7/14 警告01/03: A:e12: BUGです。defaultの書き間違『deault』か未使用ラベル:defalut :↓ deault : %%%*/

20 deault :

/* 8/14 警告03/03: A:e12: BUGです。defaultの書き間違『defualt』か未使用ラベル:defualt :↓ printf("スペルミス¥n") ; %%%*/

21 defualt :

22 printf("スペルミス¥n") ;

/* 9/14 警告01/01: A:e56: BUGです。このcase 128:には来ません:case 0x80: ; ↓ } %%%*/

23 case 0x80: ; /* charは0x7fまでしか表現できません */

24 } 25 /************************/ 26 /* 5.2. for文の罠 */ 27 /************************/

/*10/14 警告01/01: A:e175: BUGです。for文の条件部はカンマではなく、恐らく&&のはず:for(i = 0 ; 5<i,i<10 ; i++ ) { %%%*/

28 for(i = 0 ; 5<i,i<10 ; i++ ) {

29 printf("5から10の間のつもりですが,") ; 30 printf("5<i は無視されます i = %d¥n",i) ; 31 }

/*11/14 警告01/01: A:e82: BUGです。for(;常時真;)のため無限loopの危険があります:for(j = 10 ; j >= 0 ; j--) %%%*/

32 for(j = 10 ; j >= 0 ; j--) {

33 printf("無限ループか、アボートします¥n") ; 34 buf[j] = 0 ; break ; 35 } 36 /************************/ 37 /* 5.3. if文の罠 */ 38 /************************/

/*12/14 警告01/01: A:e31: then節が空行です C-FAQ 16.1:if(i != 0); { printf("C-FAQ 16.1:セミコロンが余計です¥n");}↓ if(i) %%%*/

39 if(i != 0); { printf("C-FAQ 16.1:セミコロンが余計です¥n");}

40 if(i) /*A*/ 41 if(j) /*B*/ 42 printf("コンパイラには、段落は分かりません¥n") ; 43 else

/*13/14 警告01/01: A:e29: else文がどのif文に対応するか不明瞭(な危険マクロを使用) C-FAQ 10.4:printf("elseは、A,Bどちらのif文に対応するでしょうか¥n") ;↓ %%%*/

44 printf("elseは、A,Bどちらのif文に対応するでしょうか¥n") ;

45 /************************/ 46 /* 5.4. break文の罠 */ 47 /************************/ 48 while(i++) { 49 switch(i) { 50 case 1: 51 /* ループを停止させるつもりでも止まらない */ 52 break ; 53 case 2: 54 /* goto絶対禁止の人はK&R2 page 80 参照 */ 55 goto loopend ; /* この方が安全 */ 56 } 57 } 58 loopend:

/*14/14 警告01/03: B:e35: 『return->return(X)』又は『int 関数名->void 関数名』: controlFlow: %%%*/

59 return ; /*ゴミが返ります*/

60 } 上に戻る