TEMP_FAILURE_RETRY宏定義

今天看源碼,有個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;})\





 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章