作爲一個C新手,我無法理解the following code:爲什麼`做{...;出口(...); (0)`in C?
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \
} while (0)
我收集的原因,這個功能是#define
d是重寫現有的功能,但什麼是do ... while(0)
循環的點與無條件exit()
聲明?沒有循環結構寫這個是不可能的?
作爲一個C新手,我無法理解the following code:爲什麼`做{...;出口(...); (0)`in C?
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \
} while (0)
我收集的原因,這個功能是#define
d是重寫現有的功能,但什麼是do ... while(0)
循環的點與無條件exit()
聲明?沒有循環結構寫這個是不可能的?
假設宏沒有do { ... } while(0)
循環,只是裏面的2條語句。現在,如果我要寫
if(foo())
errExit("foo!");
我的條件退出已成爲無條件退出。
很多重複在這裏我認爲。
的do...while(0)
竅門,您可以用在各種情況下errExit
不破壞任何東西:
if(x) errExit(msg);
else return 1;
被翻譯成:
if(x) do { ...; ...; } while(0);
else return 1;
如果省略do...while(0)
一部分,那麼你不能可靠地將例如分號。
do { ... } while(0)
構造是常見的,並且通常被認爲是最佳實踐,用於多個語句的宏函數,比如這個。它允許使用作爲一個單一的聲明,所以沒有任何意外。
不錯的問題,我想知道的一樣! +1 – 2013-03-21 14:37:16
標題重複檢測器太糟糕了...... – l0b0 2013-03-21 14:42:10