switchの注意点

C言語勉強中。メモがてらここに記録。

条件分岐で活躍するifやswitch。どっちも似たようなものだろうと思っていたが、switchは、実は、ちょっと独特。

if系統は、

if(条件1){条件1適合時にのみ実行}
else if (条件2){条件2適合時にのみ実行}
else{条件全てに当てはまらない時に実行}

・・・とまあ、シンプルなのだが。

switchの場合


switch{
case(条件1):実行内容1
case(条件2):実行内容2
default:実行内容3
}

これ、条件1に適合した場合、実行内容は、1も次の2も実行されてしまう。もちろん、defaultの実行内容3も。

条件2に適合した場合は、実行内容2と実行内容3が実行される。

つまり、switchは、「入り口部分」でだけ条件に適合するかどうかが問題になり、一旦適合すると、同じswitchブロック内(スコープ内)であれば、その先は、条件部分無視でずらずらと実行されることになる。

ただし、breakが途中にあれば、そこからswitchから抜ける。条件1の時、実行内容1のみで終わって欲しければ、breakを挿入しておく必要がある。

case 条件1:{実行内容1;break;}
case 条件2:{実行内容2;break;}

・・・という形でやればOK。

ちなみに、こんな感じで動作確認をしてみた。

int main(void)
{
    int cnt;

    for (cnt = 0; cnt < 5;++cnt) {    
        switch(cnt) {
        case 0:printf("case0\n");
        case 1:printf("case1\n");
        case 2:printf("case2\n");
        case 3:printf("case3\n");
        case 4:printf("case4\n");
        }        
    }
}