Instrução na macro C ++
Lendo código de cromo, foi encontrada uma macro útil para lidar com erros de EINTR de chamadas do sistema em sistemas compatíveis com POSIX. Aqui está o 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; \
})
A questão é qual é o papel da última declaração na macroeintr_wrapper_result;
? Se usarmos vírgulas em vez de ponto e vírgula - ficará claro - para retornar o resultado da última operação (operador de vírgula). Mas qual é o objetivo nesse caso?