【C言語】
ifとswitchどちらを使うべきか?
(switch vs else if)

else ifをずらずら? 多分岐 switch case!

(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をズラズラ並べない

参考:

C-FAQ20.16:Which is more efficient, a switch statement or an if/else chain?