C++ 宏中的语句

Statement in C++ macro

阅读 chromium 代码,发现有用的宏来处理 POSIX 兼容系统上系统调用的 EINTR errno。 这是代码(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;中最后一条语句的作用是什么? 如果我们使用逗号而不是分号 - 很明显 - return 是上次操作(逗号运算符)的结果。但是这种情况的目的是什么?

此宏使用 Statement-Expressions GCC 扩展。内部块中的最后一个表达式在执行后用作整体的值,很像逗号运算符。