thể trùng lặp:
Why are there sometimes meaningless do/while and if/else statements in C/C++ macros?Tại sao nên sử dụng {} khi (0) trong định nghĩa macro?
tôi gặp mã như dưới đây:
#define ev_io_init(ev,cb,fd,events) \
do { \
ev_init ((ev), (cb)); \
ev_io_set ((ev),(fd),(events)); \
} while (0)
Tôi muốn biết lý do tại sao tác giả sử dụng do { } while (0)
đây. Có sự khác biệt nào với điều này không?
#define ev_io_init(ev,cb,fd,events) { \
ev_init ((ev), (cb)); \
ev_io_set ((ev),(fd),(events)); \
}
BTW: mã là từ libev, ev_local.h
... nó làm, nhưng xin đừng ... – moonshadow
Nó làm giảm số lượng các tổ if-else . – shuva