デバッグログについては、私はよく次のようなものを見て使用しました
#ifdef DEBUG
#define DLOG(fmt, args...) printf("%s:%d "fmt,__FILE__,__LINE__,args)
#else
#define DLOG(fmt, args...)
#endif
#define
しかし、多くの場所で、2番目がに置き換えられているのを見てきました
#define DLOG(fmt, args...) do {} while (0)
特に、この答えがあり、同じ質問に対するこの他の答えへのコメントは、問題が次のような状況にあることを示唆しています
if (condition)
DLOG("foo");
私の簡単なテストでは、行の結果のセミコロン自体が条件内のno-opステートメントとして機能することが示唆されています。
どちらか一方が何もないよりdo {} while (0)
良いですか?もしそうなら、なぜですか?さらに良いものは他にありますか?