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. основа примера взята из тестов брейнбенч.
Добавлена разметка — Кодт