プリプロセッサは、条件付きコンパイルが可能であり、デバッグのためのコーディングに役立ちます。
開発中には、デバッグコードを入れておき、プログラムが完成したらデバッグコードを削除したい場合、デバッグコードを用いると便利です。
#ifdef #endif
#define DEBUG /* デバッグ有効 */
・・・
#ifdef DEBUG
cout << "Debug: var = " << var << "\n";
#endif /* DEBUG */
プログラムに、「#define DEBUG」というマクロ定義が行われていたら、#ifdef と #endif の間の行が有効になり、デバッグ用のコードが実行されます。
しかし、「#define DEBUG」の定義がなければ、、#ifdef と #endif の間の行は、存在しないものとしてプリプロセッサにより処理され、コンパイルが行われます。
#undef
あるいは、可読性を高めるために、「#define DEBUG」を・・・
#undef DEBUG /* デバッグ無効 */
と書くのも有効な方法です。
#undef を使用すると、シンボルが未定義という意味を持ちます。
#ifndef
#ifndef は #ifdef の逆であり、マクロ定義されていない場合に、#ifndef~#endif間のコードが有効となり、コンパイルが行われます。
#ifdef があれば、あまり使わないような気もします。
プログラムの一部を一時的に無効にさせる場合にも、#ifdef~#endif を使うことができます。
#ifdef UNDEF
処理1・・・;
#endif /* UNDEF */
とすることで、処理1を一時的に無効とできます。
しかし、UNDEFが定義されていれば、有効になりますので、注意です。
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/216