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