今天看源码,有个TEMP_FAILURE_RETRY宏定义一时没看明白,现在想想有点好玩,原来是换个马甲就不认识了哈哈哈哈
/* 源码 */
#define TEMP_FAILURE_RETRY(expression) \
(__extension__\
({ long int __result;\
do __result = (long int)(expression);\
while(__result == -1L&& errno == EINTR);\
__result;})\
/* 这个时候我没看明白do __result 这是在干啥,do是个类型吗,其实加个括号,就明白了。是最基础的do... while(0)的用法,简写了而已 */
/* 修改下加个大括号,更清楚了 */
#define TEMP_FAILURE_RETRY(expression) \
(__extension__\
({ long int __result;\
do \
{ __result = (long int)(expression);}\
while(__result == -1L&& errno == EINTR);\
__result;})\