【C++学習|豆知識】C++のswitch文を使いこなす!caseラベルの正しい書き方と注意点

導入

プログラミングにおいて、特定の変数に対して「値がこれならこの処理、あれならその処理」と条件分岐を行う場面は非常に多いです。if文を連ねることも可能ですが、条件が多くなるとコードが読みづらくなります。そこで活躍するのがswitch文です。本記事では、switch文の心臓部である「caseラベル」の基本から、現場で役立つ注意点までを解説します。

基礎知識

caseラベルとは、switch文の中で「どの値と一致するか」を定義するための目印です。
switch文に渡された変数(評価式)と、各caseラベルに記述された定数が一致した場合、その直後のコードブロックが実行されます。ここで重要なのは、caseラベルに指定できるのは「定数(コンパイル時に値が確定するもの)」でなければならないという点です。また、各処理の最後には、意図しない後続のcase処理まで実行されるのを防ぐためにbreak文を置くのが一般的です。

実装/解決策

caseラベルを正しく記述する際のポイントは以下の3点です。
1. 定数のみを使用する:変数や関数呼び出しの結果は指定できません。
2. break文を忘れない:breakがないと、次のcaseへ処理が流れ込む「フォールスルー」が発生します。
3. defaultラベルの活用:どのcaseにも当てはまらなかった場合の処理(エラーハンドリングなど)を記述します。

サンプルプログラム

以下のコードは、ステータスコードを判定するシンプルな例です。コピー&ペーストして動作を確認してみてください。

include

int main() {
int status = 200;

switch (status) {
case 200:
std::cout << "成功: 処理が完了しました。" << std::endl; break; // ここで終了しないと次のcaseも実行される case 404: std::cout << "エラー: リソースが見つかりません。" << std::endl; break; case 500: std::cout << "エラー: サーバー内部で問題が発生しました。" << std::endl; break; default: // どのcaseにも一致しない場合のデフォルト処理 std::cout << "不明なステータスコードです。" << std::endl; break; } return 0; }

応用・注意点

現場でよくある失敗として、breakの書き忘れによるバグが挙げられます。意図的に複数のcaseで同じ処理をさせたい場合(例:case 1: case 2: 共通処理; break;)は別ですが、基本的には各caseの末尾にbreakを入れる癖をつけましょう。

また、caseラベルには「定数式」しか書けないため、実行時に計算される値で分岐したい場合は、switch文ではなくif-else文を使用する方が適切です。状況に応じてこれらの制御構造を使い分けることが、可読性の高いコードを書くための第一歩となります。

コメント

タイトルとURLをコピーしました