2012-01-19 13 views
1

私は次のコードを持っている:C++のgoto(というより継続)構文風変わり

file_system_helpers.cpp(109) : error C2143: syntax error : missing ';' before '}' 

私はそれを変更した場合:このエラーで(VC++ 2010)コンパイルされません

do 
{ 
    doStuffP1(); 
    if (test) 
    { goto skip_increment; 
    } 
    dostuffP2(); 

    skip_increment: 
    // 1; // Only works if I remove the comment at line start. 
} while (loop); 

を:

skip_increment: 

1; 

コンパイル(および動作)。

これは本当にC++構文の制限ですか?

答えて

6

"1;"と仮定します。あなたの最初のコードスニペットから抜けていたはずだったのですか?ここでは、この文法で

ルック:http://www.lysator.liu.se/c/ANSI-C-grammar-y.html

これは、「ラベル付き文」としてラベルを定義します。つまり、ブロック本文に内容のシーケンスのどこにでもlabel: <statement>を含めることができますが、ラベルの後のステートメントはオプションではありません。これにより、skip_increment: }が無効になります。

(そして、OK、あなたはC++ではなくCを使用している。しかし、私は疑う後藤の余分な使用のための手当を作るならば、誰もがC++言語を定義しながら、について多くを世話ものでした。)

+0

私は '後藤と認識'はほぼ普遍的に悩まされていますが、内側のループから外側のループを「続ける」優れた方法はありません。私が考えることができる唯一の方法は、余分な変数(外側のループが '続行するかどうかを格納する' bool')を伴います。 –

+1

私は、余分な 'bool'を使うことは' goto'よりも優れていると主張しますが、私はプログラマーとしてはかなり経験がありません。私は 'goto'自体が安全な記述であるとは思わないし、余分な変数はそれほどコストがかかりませんね。しかし、それは私の2cです。 ^^ ' – blahman

+2

コードを関数に抽出し、早期リターンを使用します。 –

関連する問題