e43.c

&&の直後で改行してはダメ


/*修正前*/ if( a && b || c) ;
/*修正例1(上記式と同じ結果)*/ if((a && b) || c) ;
/*修正例2(||を優先する場合)*/ if( a && (b || c)) ;

解説 結合力の問題で、修正例1、2どちらを意図しているのか 分かりづらいです。 括弧を付加して修正例のように意図を明確にして下さい 詳細な説明は、 プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「2.12 優先度と評価順序」Page65C-FAQ 3.5J C-FAQ 3.5E を参照して下さい。
解説 その2 if(longlongexpA && longlongexpB || longlongexpC) と記述すると保守者に結合力の誤解を与えるのでやめましょう