(style): Expression is always false because ‘else if’ condition matches previous condition at line
(スタイル):8行目のelse ifは2行目で判定済みなので成立する事はない
[(style)multiCondition]
■else ifをズラズラ並べた例(非推奨)
#include <stdio.h>
char *風林火山(int x) {
if(x == 1)
{
return "風";
} else
if(x == 2)
{
return "林";
} else
if(x == 3)
{
return "火";
} else
if(x == 1)
{//NG 4の間違い
return "山";
}
return "バグ" ;
}
int main(void){
printf("%s\n",風林火山(0));
printf("%s\n",風林火山(1));
printf("%s\n",風林火山(2));
printf("%s\n",風林火山(3));
printf("%s\n",風林火山(4));
printf("%s\n",風林火山(5));
}
if(x == 1)が重複していますが、
コンパイルエラーは出ないので
間違いに気付きにくいです。
●switchを使った修正例(推奨)
#include <stdio.h>
char *風林火山(int x) {
switch(x){
case 1: return "風";
case 2: return "林";
case 3: return "火";
case 1: return "山";//case 4の間違い
}
return "バグ" ;
}
int main(void){
printf("%s\n",風林火山(0));
printf("%s\n",風林火山(1));
printf("%s\n",風林火山(2));
printf("%s\n",風林火山(3));
printf("%s\n",風林火山(4));
printf("%s\n",風林火山(5));
}
switch文を使用するとコンパイルエラーになるので
簡単に重複を防げます。
if/elseをずらずら並べるより
おそらく効率の良いコードが生成されます。
■OR演算子をズラズラ並べ例(非推奨)
(style) Same expression on both sides of ‘||’.
スタイル:’||’演算子の両辺同じ[(style)duplicateExpression]
int f1(int x) {
if( (x==1) ||
(x==1) || //重複
(x==3) ){
return 1;
}
return 0;
}
if文の重複はコンパイルエラーにならないので
間違いに気が付きません。
●switchを使った修正例
int f2(int x) {
switch(x){
case 1:
case 1://コンパイルエラーになる
case 3:
return 1;
}
return 0;
}
switch文caseの重複はコンパイルエラーになるので
間違いに気が付きます。
■まとめ:多分岐にはswitchを使おう!
else ifをズラズラ並べない
参考: