Даже не знаю, куда запостить — если что поправьте.
Очень часто приходится обрабатывать возвращаемое значение функций идущих подряд. Например:
if( ERROR == func1(p1, p2) )
{
cout << "ERROR func1()";
return;
}
if( ERROR == func2(p3, p4) )
{
cout << "ERROR func2()";
return;
}
...
Вот вопрос в том как лучше написать подобный код. Те чтобы не сильно напрягало глаз, не плодило лишних строк кода и тп. За все время возникали следующие идеи:
1. #define
#define CHECK_AND_EXIT(func, ok_value, err_str) \
if( ok_value != func ) \
{ \
cout << err_str; \
return; \
}
Далее код превращается в:
CHECK_AND_EXIT( func1(p1, p2), OK, "ERROR func1()" );
CHECK_AND_EXIT( func1(p2, p3), OK, "ERROR func2()" );
2. throw — наверное стандартный подход
try {
if( ERROR == func1(p1, p2) ) throw "ERROR func1()"
if( ERROR == func2(p2, p3) ) throw "ERROR func1()"
}
catch(...)
{
cout << ...;
return;
}
3. while — аналогично throw
int bOk = true
while(true)
{
if( ERROR == func1(p1, p2) ) { bOk = false; break; }
if( ERROR == func2(p3, p4) ) { bOk = false; break; }
break;
}
if(!bOk)
{
cout << ...;
return;
}
Прошу, у кого какие идеи?