c++ - C++ 宏中的语句

标签 c++ c macros c-preprocessor

阅读 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/

相关文章:

vim - 如何在没有 python 或 ruby​​ 的情况下在 Vim 中获取计数器变量?

c++ - 如何连续递增后递减?

c++ - 让相同的常量适用于 float 或 double

c - c中的错误函数返回

c - 在将宏作为参数传递给另一个宏之前,按值转换宏

c++ - 解释 C++ 中的位测试宏

c++ - 有没有办法对此进行typedef?

c++ - 如何使用 QFileDialog 和 boost 保存多张图片

c - Opengl,2d 固定形状,在带有移动相机的 3d 场景中

c - 大数组不会导致堆栈溢出