есть ли проблемы с этим макросом - проверьте состояние и вернитесь, если не удалось - PullRequest
3 голосов
/ 06 января 2011

у нас есть часто повторяющиеся строки в коде, которые проверяют состояние возврата функции, а если это ошибка, немедленно возвращаются со статусом. Я думал об определении макроса для этого:

#define RETURN_IF_FAILED(x) { int stat = (x); if (FAILED(stat)) return stat; }

Локальная переменная потому, что параметр x может быть вызовом функции.

Поскольку я знаю, что есть некоторые странные артефакты использования макросов, и я не очень опытен в них, я хотел бы спросить, видите ли вы какие-либо проблемы с этим макросом. Спасибо.

(и, пожалуйста, не предлагайте использовать исключения - я сам ненавижу этот стиль, но это так, как здесь)

1 Ответ

7 голосов
/ 06 января 2011

Я бы хотел немного его изменить;заключив его в do{} while(0) следующим образом:

#define RETURN_IF_FAILED(x) do { int stat = (x); if (FAILED(stat)) return stat; } while(0)

Теперь вы можете использовать этот МАКРО, например так:

if (SomeCondition)
  RETURN_IF_FAILED(x); //<--- note the "usual" semicolon!
else
{
   //some code
}

В вашей версии этот код вообще невозможен.; после макроса может вызвать проблемы в вашей версии!

...