Statement in C ++ Makro

Reading Chromium Code, hilfreiches Makro für die Behandlung von EINTR-Fehlern bei Systemaufrufen auf POSIX-kompatiblen Systemen. Hier ist der Code (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; \
})

Die Frage ist, welche Rolle die letzte Anweisung im Makro @ spieleintr_wrapper_result;? Wenn wir Kommas anstelle von Semikolons verwenden, ist es klar, dass das Ergebnis der letzten Operation zurückgegeben wird (Kommaoperator). Aber wozu dient das in diesem Fall?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage