コンパイラのさまざまなヒューリスティックに応じて、生成されたコードは単なる "if else if" ステートメントのチェーンになる可能性があります。ケースのスペースが小さい場合、コンパイラはジャンプ テーブルを作成できます。次に例を示します。
switch (foo) {
case 0:
a();
case 1:
b();
case 2:
c();
case 3:
d();
default:
e();
}
次のようなものに翻訳できます。
if (foo < 0 || foo > 3) goto label_default;
else goto internal_jump_table[foo];
internal_jump_table = { label_0, label_1, label_2, label_3 };
label_0: a();
label_1: b();
label_2: c();
label_3: d();
label_default: e();
他にも実行できる最適化があります。等しいかどうかをチェックする代わりに、コンパイラは if ステートメントの階層を構築して、正しい値を二分探索することができます。または、ジャンプ テーブルが適切な値が多数あり、通常の検索が行われる外れ値がいくつかある場合もあります。または、ジャンプ テーブルが 2 つだけの場合もあります。