Заявление в макросе C ++
Читая код хрома, нашел полезный макрос для обработки EINTR с ошибками системных вызовов в POSIX-совместимых системах. Вот код (base / posix / eintr_wrapper.h):
#define HANDLE_EINTR(x) ({ \
decltype(x) eintr_wrapper_result; \
do { \
eintr_wrapper_result = (x); \
} while (eintr_wrapper_result == -1 && errno == EINTR); \
eintr_wrapper_result; \
})
Вопрос в том, какова роль последнего утверждения в макросе.eintr_wrapper_result;
? Если мы будем использовать запятые вместо точек с запятой - это будет понятно - для возврата результата последней операции (оператор запятой). Но какова цель в этом случае?