перерыв и метка «Метка MyLabel отсутствует» - PullRequest
14 голосов
/ 10 января 2012

У меня есть такой код:

if(condition1)
{
    break MyLabel;
}
while(true)
{
    //some code here
    MyLabel: if(condition2) break;
    //more code here
}

и я получаю эту ошибку:

Метка MyLabel отсутствует.

Что не так?

Ответы [ 2 ]

47 голосов
/ 10 января 2012

Вы можете перейти только к метке, которая находится в текстовом выражении . В вашем примере метка НЕ ​​содержится в операторе, который содержит оператор break.

(Для чего это стоит, даже языки более высокого уровня, которые поддерживают goto, не позволяют вам прыгнуть в середину цикла извне. Я думаю о C ... и более старых языках, таких как FORTRAN.)

Java позволяет вам взломать, но взлом является незаконным ... и вас арестуют: -)

(Извините, я не смог устоять. Для тех, кто не понимает шутки, "взлом" - это когда кто-то входит в ваш дом, чтобы украсть вещи - см. "разбить и войти" ...)

8 голосов
/ 10 января 2012

Вы не можете использовать ярлыки как goto в этом общем способе.
Используйте метки, если хотите перейти на более высокий уровень вложенного кода.

например

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