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() используеться для перехода по метке...
Здравствуйте, Kuman, Вы писали:
K>Кто нибудь можеть мне глупому подсказать почему такой код являеться правильным (компилируемым)?
Читать про оператор "запятая".
Здравствуйте, Kuman, Вы писали:
K>но каким образом обьсняеться что только последний аргумент оператора switch() используеться для перехода по метке...
Читайте внимательнее про оператор запятая. (Обычно его описываю рядом с описанием цикла for(), т.к. запятая часто там используется для инкремента сразу двух переменных.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, Kuman, Вы писали:
K>>Кто нибудь можеть мне глупому подсказать почему такой код являеться правильным (компилируемым)? B>Читать про оператор "запятая".
Здравствуйте, php-coder, Вы писали:
PC>Здравствуйте, Kuman, Вы писали:
K>>но каким образом обьсняеться что только последний аргумент оператора switch() используеться для перехода по метке...
PC>Читайте внимательнее про оператор запятая. (Обычно его описываю рядом с описанием цикла for(), т.к. запятая часто там используется для инкремента сразу двух переменных.
Здравствуйте, Kuman, Вы писали:
K>>>Кто нибудь можеть мне глупому подсказать почему такой код являеться правильным (компилируемым)? B>>Читать про оператор "запятая".
K>Мдя — реально так можно ...
Здравствуйте, Kuman, Вы писали:
K>>>но каким образом обьсняеться что только последний аргумент оператора switch() используеться для перехода по метке...
PC>>Читайте внимательнее про оператор запятая. (Обычно его описываю рядом с описанием цикла for(), т.к. запятая часто там используется для инкремента сразу двух переменных.
K>Мдя, нашел — запятая рулит... спасибо...
обычно она всё-таки не рулит, а затрудняет чтение.