#ifdef #endif #undef #ifndef/条件付きコンパイル

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

プリプロセッサは、条件付きコンパイルが可能であり、デバッグのためのコーディングに役立ちます。
開発中には、デバッグコードを入れておき、プログラムが完成したらデバッグコードを削除したい場合、デバッグコードを用いると便利です。

スポンサーリンク

#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が定義されていれば、有効になりますので、注意です。

スポンサーリンク
 
スポンサーリンク