列挙型があるとしましょう。
enum class ShapeName : char {TRIANGLE,CIRCLE,SQUARE};
そして後で私はこのような機能を持っています:
void Function (ShapeName const shape){
switch (shape){
case ShapeName::TRIANGLE:
DoSomething1();
break;
case ShapeName::CIRCLE:
DoSomething2();
break;
case ShapeName::SQUARE:
DoSomething3();
break;
default:
//THIS CODE BLOCK SHOULD NEVER BE EXECUTED!
}
return;
}
デフォルトのラベルは決して実行されるべきではありませんが、プログラマーが「ShapeName」に別の値を追加し、それがスイッチで考慮されていない場合に発生する可能性のある潜在的なバグを説明したいと思います。
あなたは私に何を勧めますか?
1.アサーションアサーション
を使用できますが、何をアサーションしていますか?
assert(false); //?
2.例外例外
をスローすることはできますが、それはあまり良い習慣ではないと思います。例外は、特定の環境のために予測できない実行時イベントに対するものであるという印象を受けています。
3.
終了エラーが発生した場合、プログラムをすぐに終了できます。それは最良のアイデアのように感じますが、それが良い習慣かどうかはわかりません。アサーションの利点は、プログラムを出荷する準備ができたときにすべてオフにできることだと思いました。そうすると、そのアサーションコードはすべて存在しなくなります。
多分私が気付いていない別の方法があります。未考慮の値について警告するコンパイラフラグを使用しますが、それでも他の人が推奨するものを知りたいです。