讀取鉻代碼,發現有用的宏,用於在符合POSIX的系統上處理系統調用的EINTR errno。 這裏是代碼(基地/ 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;
的作用? 如果我們使用逗號而不是分號 - 這將很清楚 - 返回上次操作的結果(逗號運算符)。但是這種情況下的目的是什麼?
查看可能的重複:[在ANSI C中包含parens表達式的複合語句(塊)?](http://stackoverflow.com/q/1238016/1708801)...因爲我對這個問題的回答是: *複合語句中的最後一項應該是一個表達式,後跟分號;這個子表達式的值作爲整個構造的價值。* –