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 扩展。内部块中的最后一个表达式在执行后用作整体的值,很像逗号运算符。
阅读 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 扩展。内部块中的最后一个表达式在执行后用作整体的值,很像逗号运算符。