ホームページ >Java >&#&チュートリアル >C が `switch` ステートメントの `case` ステートメントの後に `break` ステートメントを自動的に挿入しないのはなぜですか?

C が `switch` ステートメントの `case` ステートメントの後に `break` ステートメントを自動的に挿入しないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 22:33:23233ブラウズ

Why Doesn't C   Automatically Insert `break` Statements After `case` Statements in `switch` Statements?

C の Case ステートメントの後の Break ステートメントの必要性

C の switch ステートメントは単一の式を評価し、それに基づいて特定のコード ブロックを実行します。一致するケースラベル。コンパイラは各 case ブロックの後に Break ステートメントを自動的に挿入しませんが、この設計上の決定には根深い理由があり、実際的な柔軟性が提供されます。

自動 Break ステートメントがない理由

歴史的に、この設計の選択は ARM プロセッサ アーキテクチャの制限に由来しています。 ARM 命令セットの初期のバージョンでは、ブレーク命令にはパフォーマンスが低下していました。ブレーク ステートメントの挿入をプログラマに任せることで、コンパイラは特定のシナリオでの最適化と命令サイクルの削減を可能にしました。

複数のコード ブロックが実行されるとき

が存在しないにもかかわらず自動 Break ステートメントの場合、複数のコード ブロックを許可する正当な使用例があります。実行:

  • フォールスルー動作: 特定の状況では、複数のケースで同じコード ブロックを実行することが望ましい場合があります。たとえば、次のことを考えてみましょう:
switch (ch) {
  case 'A':
  case 'B':
  case 'C':
    printf("Vowel\n");
    break;

  default:
    printf("Consonant\n");
}

ここで、入力文字が「A」、「B」、または「C」の場合、プログラムは「母音」を出力する必要があります。これらのケースに単一のコード ブロックを使用することで、コードの重複を避け、明確さを維持できます。

  • 統合された機能: 場合によっては、複数のケースが同様の機能を共有することがあります。これらの場合のコード ブロックをマージすると、コードの可読性と保守性が向上します。以下に例を示します。
switch (ch) {
  case '1':
  case '2':
  case '3':
    printf("Low number\n");
    break;

  case '4':
    printf("Medium number\n");
    break;

  default:
    printf("High number\n");
}

ここで、最初の 3 つのケースは小さい数値を処理するため、同じコード ブロックを実行します。

フォールスルーはプログラミングに反していると考えられますが、ほとんどの場合、コードが十分に文書化され、その意味が完全に理解されている限り、有益であることが証明される場合もあります。

以上がC が `switch` ステートメントの `case` ステートメントの後に `break` ステートメントを自動的に挿入しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。