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

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

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

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


日時: 2008年06月04日 23:13
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/216

この記事にトラックバックされる方は、参照先が分かるようにするために、「#ifdef #endif #undef #ifndef/条件付きコンパイル」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - C言語とC++勉強ルーム