Đối debug logging, tôi thường nhìn thấy và sử dụng cái gì đó nhưđúng C Preprocessor vĩ mô không-op
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
nhưng trong một số nơi, tôi đã thấy thứ hai #define
thay thế bằng
#define DLOG(fmt, args...) do {} while (0)
Cụ thể, có this answer và nhận xét về this other answer cho cùng một câu hỏi cho thấy rằng sự cố sẽ xảy ra trong một tình huống như
if (condition)
DLOG("foo");
mặc dù thử nghiệm nhanh chóng của tôi cho thấy rằng dấu chấm phẩy kết quả trên dòng của chính nó sẽ phục vụ như là tuyên bố no-op bên trong điều kiện.
Là một hoặc khác của không có gì và do {} while (0)
tốt hơn? Nếu vậy, tại sao? Có cái gì khác thậm chí còn tốt hơn?
có thể trùng lặp của [do {...} trong khi (0) điều gì là tốt cho?] (Http://stackoverflow.com/questions/257418/do-while-0-what-is-it-good -cho) –