代码之家  ›  专栏  ›  技术社区  ›  Ferenc Deak

有人能告诉我以下代码使用的构造的名称吗?[副本]

c c++
  •  2
  • Ferenc Deak  · 技术社区  · 6 年前

    下面是代码(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; 如果我们使用逗号而不是分号-它将是明确的-返回上一个操作的结果(逗号运算符)。但这件事的目的是什么?

    0 回复  |  直到 10 年前
        1
  •  9
  •   Quentin    10 年前

    此宏使用 Statement-Expressions GCC扩展。内部块中的最后一个表达式在执行后充当整个表达式的值,这与逗号运算符非常类似。