Вопрос про "goto" в C - PullRequest
       25

Вопрос про "goto" в C

0 голосов
/ 28 ноября 2010

Я пытаюсь понять C-код.В некоторой части есть:

for ...{
    if condition{
       a=1;
       break;
    }
}

, который в более поздней версии изменен на:

for ...{
    if condition{
       goto done;
    }
}
done: a=1;

С моей точки зрения, обе версии должны давать одинаковый результат, но это делаетне произойдет.Знаете ли вы, почему?

ИСПРАВЛЕНИЕ: Исправление:

for ...{
    if condition{
       goto done;
    }
}

            goto notdone;
            done: 
                ok=0;
            notdone:

Ответы [ 2 ]

6 голосов
/ 28 ноября 2010

Это зависит от того, имеет ли цикл for какие-либо другие условия выхода.

  • В первом примере a=1 происходит только для этого конкретного условия выхода в операторе if.

  • Во втором примере a=1 происходит в всех сценариях, которые выходят из цикла.Его можно обойти только с помощью оператора return или другого оператора goto.

3 голосов
/ 28 ноября 2010

Во второй версии a=1 в конечном итоге выполняется , хотя condition было ложным, просто потому, что поток управления в конечном итоге достигает done: после того, как условие цикла больше не выполняется.

...