竹蔵のだいあり - stakezo’s diary

健忘録として。役に立つかな?という情報も

C/C++ デバッグ時の特定処理の可読性(#define, #ifdef, #endifなど)

これは一生使えると思った


開発時にデバッグをするために特定の動作をしようとすると、


#define DEBUG // すでに定義されている場合は、名前を変えること

   .  .  .

#ifdef DEBUG
   printf("xxxx");
#endif


となるが、出力のために3行を使用し、インデントも先頭の位置に戻り、めちゃくちゃ可読性が落ちて困っていた。ある文献を発見し、めちゃくちゃ効率良くなった。
(文献:https://sehermitage.web.fc2.com/program/c_progtech.html
#define DEBUG
#ifdef DEBUG
#define DBG(x) x
#else
#define DBG(x)
#endif

   .   .   .

   DBG(printf("xxxx");)


これで、前述と同じ動作になる。意味合いとしては、DEBUG_ONが定義されているときは
DBG(x)、つまりDBGの中身xは、ただのxにしてね。という意味なので
DBG(printf("xxxx");) は、 ただのprintf("xxxx"); に変化する。
コンパイルは、ソースをテキストとしてコンパイラに読み込む際に、マクロ、つまりDBG(x)で、カッコの中のテキストを加工する。そして加工し終わったソースをコンパイルに掛け、実行ファイルを作る。


これでかなり可読性も増すし、時間の短縮にもなると思う!


~裏話~

実際はC言語に近い、別の言語での作業で見つけた話です。