【发布时间】:2015-06-01 14:52:51
【问题描述】:
阅读 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; 中最后一条语句的作用是什么?
如果我们使用逗号而不是分号 - 很明显 - 返回最后一次操作的结果(逗号运算符)。但是这种情况的目的是什么?
【问题讨论】:
-
查看可能的重复:Are compund statements (blocks) surrounded by parens expressions in ANSI C? ...正如我对该问题的回答所说:复合语句中的最后一件事应该是一个表达式,后跟一个分号;这个子表达式的值作为整个构造的值。
标签: c++ c macros c-preprocessor