Namaran

Code daily. Without assist.

2026-09-15

case_in_if.c

#include <stdio.h>

void f(int n) {
    switch (n) {
        if (0) {
    case 1:
            puts("one");
        } else {
    case 2:
            puts("two");
        }
    }
}

int main(void) {
    f(1);
    f(2);
    f(3);
}

これはコンパイルでき、何かを出力します。何が出力されるでしょうか?

Answer

onetwoを1行ずつ。caseswitch本体の中ならどこに置いてもよいただのジャンプ先で、ブロックの入れ子に縛られません。f(1)if (0)の条件を評価せずにthen側の中へ直接飛び、oneを出したあとthenの終わりからelseを飛び越えて抜けます。f(2)else側へ飛んでtwof(3)は一致するcasedefaultもないので何もしません。