3
什麼是定義宏這樣的原因:宏爲什麼這樣聲明?
#define test_errno(msg) do{if (errno) {perror(msg); exit(EXIT_FAILURE);}} while(0)
我的意思是背後do{}while(0)
的原因是什麼?當然,它只會做一次,零是恆定的,不能以某種方式改變爲非零,那麼爲什麼要使用這樣的構造?
什麼是定義宏這樣的原因:宏爲什麼這樣聲明?
#define test_errno(msg) do{if (errno) {perror(msg); exit(EXIT_FAILURE);}} while(0)
我的意思是背後do{}while(0)
的原因是什麼?當然,它只會做一次,零是恆定的,不能以某種方式改變爲非零,那麼爲什麼要使用這樣的構造?
它允許之類的東西
if (condition)
test_errno(...);
帶或不帶括號正常工作。
在這種情況下沒有很好的理由。在類似的結構中,內部陳述有助於continue
和break
做有用的事情。
#define test_errno(msg) do {if (cond1) break; \
if (cond2) break; \
if (cond3) break; \
do_something_if_all_condtions_met();} while(0)
缺少';'。宏認爲這個,它需要一個結束';',所以它看起來像一個真正的功能。 – vvy