これは一生使えると思った
開発時にデバッグをするために特定の動作をしようとすると、
#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言語に近い、別の言語での作業で見つけた話です。