Немного разверну изначальный пример:
Код:
do
{
if (условие1)
{
expr11;
expr12;
...;
expr1n;
break;
}
if (условие2)
{
expr21;
expr22;
...
expr2n;
break;
}
expr1;
expr2;
...;
exprn;
} while (false)
Видно что тут очень много лишнего. Какие-то ду, какие-то вайлы, ифов опять же пачка.
Посему предлагаю следующее рационализаторское предложение -- оставить ровно один if! do..while тоже не нужны, как не нужны и else всякие, ибо это явное излишество. Итак:
Код:
if ( (условие1 and (
expr11,
expr12,
...,
expr1n,
true ) )
or
(условие2 and (
expr21,
expr22,
...,
expr2n
true) )
or
( expr1,
expr2,
...,
exprn
true) );
Пример использования на практике (это чистый C++, без всяких препроцессоров и прочих извратов. программа приводится целиком):
Код:
#include <iostream>
using namespace std;
void foo(int a)
{
if ( (0==a and (
cout << "a=zero",
cout << endl,
true ) )
or
(1==a and (
cout << "a=one",
cout << endl,
true) )
or
(2==a and (
cout << "a=two",
cout << endl,
true) ) );
}
int main()
{
foo(0);
foo(1);
foo(2);
foo(3);
foo(5);
return 0;
}
Ну, думаю всякому очевидно что результат работы программы таков:
Код:
a=zero
a=one
a=two