Чтение кода хрома, нашел полезный макрос для обработки EINTR errno системных вызовов в системах, совместимых с POSIX. Вот код (базовый/POSIX/eintr_wrapper.h):Заявление в макросе C++
#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;
? Если мы используем запятые вместо точек с запятой - будет ясно - вернуть результат последней операции (оператор запятой). Но какова цель в этом случае?
См. Возможный дубликат: [Являются ли компромиссные утверждения (блоки), окруженные выражениями parens в ANSI C?] (Http://stackoverflow.com/q/1238016/1708801) ... поскольку мой ответ на этот вопрос говорит: * Последняя вещь в составном выражении должна быть выражением, за которым следует точка с запятой; значение этого подвыражения служит значением всей конструкции. * –