do while文でcontinueを使用する誤解

1111 ワード

continueはdo whileの条件判断をスキップしません
まずコードを貼ります.
int i = 0;
do
{
    printf("%d
"
, i); if(i < 10) continue; }while(++i < 10);

以前はcontinueがdoの開始位置にジャンプすると思っていたので、上記のプログラムはデッドサイクルになると思っていました.実はそうではなく、continueは「}」にジャンプし、do whileの条件判断をスキップすることはありません.
次に、cppreferenceからのcontinueの定義の例を示します.
do {
    // ...
    continue; // acts as goto contin;
    // ...
contin:;
} while (/* ... */);

continueはラベルcontinにジャンプすることに相当するので、while()の文は正常に実行されます.
リファレンス
continueの定義:http://en.cppreference.com/w/cpp/language/continue