Declaración en macro C ++

Al leer el código de cromo, se encontró una macro útil para manejar el error EINTR de las llamadas al sistema en sistemas compatibles con POSIX. Aquí está el código (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; \
})

La pregunta es cuál es el papel de la última declaración en macroeintr_wrapper_result; ? Si usamos comas en lugar de punto y coma, quedará claro, para devolver el resultado de la última operación (operador de coma). ¿Pero cuál es el propósito en este caso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta