Для ведения журнала отладки я часто видел и использовал что-то вроде
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
но в ряде мест я видел, как второе #define
заменено на
#define DLOG(fmt, args...) do {} while (0)
В частности, есть этот ответ , а комментарий к этому другому ответу на тот же вопрос предполагает, что проблема будет в ситуации типа
if (condition)
DLOG("foo");
хотя мой быстрый тест предполагает, что результирующая точка с запятой в строке сама по себе будет служить оператором no -op внутри условного оператора.
Тот или иной из ничем и do {} while (0)
лучше? Если да, то почему? Есть ли что-то еще, что еще лучше?