Элегантная проверка ошибок

Наш код (в простой реализации библиотеки) начинает выглядеть так:

err = callToUnderlyingLibrary1();
if (err!=0) {
printf ("blah %d\n", err);
...
}

err = callToUnderlyingLibrary2();
if (err!=0) {
printf ("blah %d\n", err);
...
}

err = callToUnderlyingLibrary3();
if (err!=0) {
printf ("blah %d\n", err);
...
}

Это громоздко и некрасиво. Есть ли лучший способ сделать это? Возможно, с помощью препроцессора C? Я был думая что-то вроде:

CHECK callToUnderlyingLibrary1();
CHECK callToUnderlyingLibrary2();
CHECK callToUnderlyingLibrary3();

где макрос CHECK вызывает функцию и выполняет элементарную проверку ошибок.

Существуют ли предпочтительные идиоматические способы решения этой проблемы?

25
задан Ren 3 August 2011 в 19:56
поделиться