先に概要を書くと caseの値は連番かつ昇順(上から小さい数で下に行くほど増えていく)となるように心がける。ある程度caseが多ければあとは勝手にコンパイラがテーブルジャンプ最適化を行う。 goto文やreturn文などでswitch文途中から抜けないようにする。あるとテーブルジャンプ最適化が行われない。 MSVC(Visual Studio)でコンパイルする場合、default:の箇所に__assume(0);と記述すれば上記二つを無視して強制的にテーブルジャンプ最適化が行われる。ただし、goto・return等でのswitch抜けがあるまま実行すると例外エラーが発生する。 追記:上記の__assume(0)はC++23から「std::unreachable()」で標準化 FM TOWNSエミュレータ「津軽」を弄っていて、どうもエミュレーターの実行速度が既にあるTOWNSエミュレータの「
![C / C++ 言語のswitch文を最適化 (テーブルジャンプが使われるようにする) - 人生に疲れた男のblog](https://cdn-ak-scissors.b.st-hatena.com/image/square/34db23613cbac89e5ca5d262bb15c70496d342c6/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2FB%2FBCC%2F20221014%2F20221014201814.png)