阅读 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;
中 last 语句的作用是什么?
如果我们使用逗号而不是分号 - 很明显 - 返回上次操作的结果(逗号运算符)。但这种情况下的目的是什么?
最佳答案
此宏使用 Statement-Expressions海湾合作委员会扩展。内部 block 中的最后一个表达式在执行后用作整体的值,很像逗号运算符。
关于c++ - C++ 宏中的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53780054/