C ++ Goto (а не продолжить) синтаксическая странность - PullRequest
1 голос
/ 19 января 2012

У меня есть следующий код:

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

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

, который не компилируется (VC ++ 2010) с этой ошибкой:

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

Если я изменю его на:

skip_increment:

1;

Он компилируется (и работает).

Действительно ли это ограничение синтаксиса C ++?

1 Ответ

6 голосов
/ 19 января 2012

Я предполагаю "1;"должен был отсутствовать в вашем первом фрагменте кода?

Посмотрите на эту грамматику здесь: http://www.lysator.liu.se/c/ANSI-C-grammar-y.html

Это определяет метки только как "помеченный оператор".То есть тело блока может содержать label: <statement> в любом месте своей последовательности содержимого, но оператор после метки не является обязательным.Так что из-за этого skip_increment: } станет недействительным.

(И, хорошо, вы используете C ++, а не C; но я сомневаюсь, что когда кто-то сильно беспокоился при определении C ++, то допускал ли допуск для дополнительного использования goto?язык.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...