use*_*854 3 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; \
})
Run Code Online (Sandbox Code Playgroud)
问题是最后一个陈述在宏观中的作用是什么eintr_wrapper_result;?如果我们使用逗号而不是分号 - 很明显 - 返回上一个操作的结果(逗号运算符).但是这个案子的目的是什么?
该宏使用Statement-Expressions GCC扩展.内部块中的最后一个表达式一旦执行就充当整体的值,就像逗号运算符一样.