e274.c

深すぎるネストは良くない


修正前 void func( struct *mem10p ) { if ( mem10p->m1 == ok ) { if ( mem10p->m2 == ok ) { if ( mem10p->m3 == ok ) { if ( mem10p->m4 == ok ) { ~ if ( mem10p->m10 == ok ) { 正常処理 ; } else { エラー処理 ; ~ } else { エラー処理 ; } else { エラー処理 ; } else { エラー処理 ; } else { エラー処理 ; }
修正後 void func( struct *mem10p ) { if ( mem10p->m1 != ok ) { エラー処理 ; } if ( mem10p->m2 != ok ) { エラー処理 ; } if ( mem10p->m3 != ok ) { エラー処理 ; } if ( mem10p->m4 != ok ) { エラー処理 ; } ~ ~ if ( mem10p->m10 != ok ) { エラー処理 ; } 正常処理 ; }
解説 エラー処理は、その場で処理してから returnするか、 関数の終わりに用意した共通エラー処理部に goto文で飛ばすと良いでしょう。 詳細な説明は、 Cプログラミング診断室(藤原博文 著)』:12章 を参照してください。