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?