C ++宏中的语句

时间:2015-06-01 14:52:51

标签: c++ c macros c-preprocessor

阅读铬代码,找到了有用的宏来处理POSIX兼容系统上系统调用的EINTR错误。 这是代码(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;中的作用是什么? 如果我们使用逗号而不是分号 - 很明显 - 返回上一个操作的结果(逗号运算符)。但是这个案子的目的是什么?

1 个答案:

答案 0 :(得分:9)

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