Синтаксис потока управления в C ++ - PullRequest
2 голосов
/ 03 августа 2010

В следующем примере c ++ (абзац был пропущен в целях).

if(condA)          // if #1
if(condB)          // if #2
if(condC)          // if #3
if(condD)          // if #4
funcA();
else if(condD)     // else #1 if #5
funcB();
else if(condE)     // else #2 if #6
funcC();
else               // else #3
funcD();
else if(condF)     // else #4 if #7
funcE();
else               // else #5
funcF();

Что else относится к тому, что if и каково правило по этому поводу?(да, я знаю, что использование { } решит эту проблему).

Ответы [ 6 ]

5 голосов
/ 03 августа 2010
if(condA)          // if #1
    if(condB)          // if #2
        if(condC)          // if #3
            if(condD)          // if #4
                funcA();
            else if(condD)     // else #1 if #5
                funcB();
            else if(condE)     // else #2 if #6
                funcC();
            else               // else #3
                funcD();
        else if(condF)     // else #4 if #7
            funcE();
        else               // else #5
            funcF();
3 голосов
/ 03 августа 2010

Каждый else всегда относится к самому внутреннему if возможному.

Так что

if (a)
if (b) B;
else C;

эквивалентно

if (a) {
  if (b) B;
  else C;
}
1 голос
/ 03 августа 2010

DeadMG прав. На случай, если вы заинтересованы, правило:

else прилагается к последнему свободному (то есть незащищенные скобками и без соответствующего остального) if.

1 голос
/ 03 августа 2010

Никогда не пишите такой код в производственной среде.Это тебя укусит.

0 голосов
/ 20 декабря 2010

C ++ знает, что еще совпадает с каким if, и компиляторы C ++ имеют очень хорошие парсеры, которые разбираются с этим во флэш-памяти. Проблема в том, что вы не очень хороши в этом.

Запустите это через C ++ prettyprinter , и отформатированный текст будет очень понятен.

0 голосов
/ 03 августа 2010

Это называется проблемой "Dangling else". Соглашение для решения этой проблемы заключается в том, чтобы прикрепить 'else' к ближайшему оператору 'if'.

Висячая еще википедия

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