web-dev-qa-db-ja.com

switch-caseで中括弧を使用する場合の 'break'ステートメント

C/Objective-C/C++のすべてのswitch caseステートメントで中括弧を使用しています

少し前まで、中括弧内にbreak;ステートメントを含めることが良いか悪いかを検討していませんでした。それは問題ではないと思いますが、それでも質問する価値があると思います。

    switch (foo) {
        case 1: {
            // stuff
            break;
        }

        default: {
            break;
        }
    }

    switch (foo) {
        case 1: {
            // stuff
        } break;

        default: {
            // stuff
        } break;
    }
40
griotspeak

短い答え:それは問題ではありません。

30

もう少し詳細な答えを与えてください...

公式のC99仕様では、breakステートメントについて次のように述べています。

Breakステートメントは、最小の囲みスイッチまたは反復ステートメントの実行を終了します。

だからそれは本当に重要ではありません。私は中括弧の中に休憩を入れました。中かっこの内側の他の場所で改行することもできるので、中かっこで終了改行を持つこともより論理的です。一種のreturnステートメントのようなものです。

11
gregschlom

中括弧とスイッチを組み合わせる方法には、さまざまなコーディングスタイルがあります。例では、好みのものを使用します。 breakステートメントは、場所に関係なく、最も内側のループまたはスイッチステートメントから抜け出します。たとえば、1つのケースに複数の休憩を入れることができます。

switch (foo) {
case 1:
    {
        if (bar)
            break;
        bar = 1;
        ...
    }
    break;
}

isは多少悪い習慣と見なされていますが、ケースをどこにでも置くことができます。ケースのラベルはgotoのラベルによく似ています。私がこのようなものを書いたのは偶然です:

switch (foo) {
case 1:
    bar = 1;
    if (0) {
case 2:
        bar = 2;
    }
    ...
    break;
}

ただし、注意して使用してください。

5
Per Johansson

字句スコープに必要な場合を除いて、最初からカーリーを使いたくないと思います。最初の例は私にはよく見えますが、本当の答えはそれは好みの問題だと思います。

1
Dagg Nabbit

明確に述べたように、これは個人的なスタイルの問題にすぎませんが、私は常にブレイクステートメントを中括弧の外に置きます。

0
Zac