switch(0,1,fnk(),3,4,i)
От: Kuman  
Дата: 09.06.08 12:06
Оценка:
void fnk()
{
    cout << "!!!" << endl;
}

void f(int i)
{
     switch(0,1,fnk(),3,4,i)
     {
     case 0: cout<<0; break;
     case 1: cout<<1; f(i-1); break;
     case 2: cout<<2; f(i-1); break;
     case 3: cout<<3; f(i-1); break;
     case 4: cout<<4; f(i-1); break;
     default:
          cout<<i;
          f(i-2);
          break;
     };
}


int main( int argc, char *argv[] ) 
{
    f(11);

    return 0;
}

Кто нибудь можеть мне глупому подсказать почему такой код являеться правильным (компилируемым)?
Выполняются все аргументы выражения/условия switch и последний из них используеться для перехода по метке case.
Я считал что компилер должен грязно выругаться на такое — ан нет все ок. Ну хоть бы варнинг выкинул ...
Я понимаю что в условии может быть любое выражение а-ля "if (OK==str.length())", но каким образом обьсняеться что
только последний аргумент оператора switch() используеться для перехода по метке...

P.S. основа примера взята из тестов брейнбенч.
Добавлена разметка — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.