18

今日、ケースなしで switch ステートメント内にコードを記述してもコンパイラがエラーを出さないことを偶然発見しました。(case ステートメントの欠如について不平を言いましたが、コードの後に​​ 1 つ追加した後、コードが役に立たないことを知らせる警告はそれほどありませんでした。)

次のコードを許可する目的があるのか​​ 、それとも「制限する方が面倒なので許可する」ということの1つにすぎないのかを理解しようとしています.

#include <iostream>
void foo() {
   std::cout << "foo" << std::endl;
}

int main()
{
   for (int a = -10; a < 10; ++a)
   {
      switch(a)
      {
         foo();
      case 4:
         std::cout << "4" << std::endl;
      }
   }
}

これにより、a == 4 の場合に期待どおりに "4" が出力され、foo が出力されることはありません。問題は、foo();最初のケースの前にステートメントを許可する (潜在的に難解ですが有用な) 理由があるかどうかです。そこで変数を宣言して初期化することは許可されていないことは確かです。

(FWIW、私はこれをいくつかのコンパイラでテストしましたが、それらはすべて同じ動作をもたらしています。驚くべきことに、それらはすべて警告を出力しません。)

4

2 に答える 2