• 締切済み

#ifdef _DEBUGが効かない

こんにちは。 Win2000、VC++6.0使用。 今までC言語でプログラムを組んではいましたが、 #define _DEBUG #ifdef _DEBUG print(...); #endif というようにデバッグ用のコードを入れたことはありませんでした。 このような便利なものがあると知り、早速使ってみたのですが、 #define _DEBUG の一文をコメントアウトして、再コンパイル(リビルド) して実行してみたのですが、 普通に #ifdef _DEBUG #endif で囲まれた部分が実行されてしまいます。 #define _DEBUG を宣言しなければ、実行されないと思っていたのですが 自分の勘違いでしょうか? よくわかりません。 どなたかご存知の方、よろしくお願いします。

みんなの回答

  • _nob
  • ベストアンサー率0% (0/0)
回答No.6

自分も同じことをして悩んでたのですが、なんとなくわかったので書いておきます。 http://www.mnc.co.jp/intime/user/intimedev.php?INtime%20technical%20FAQ#content_1_67 ↑環境が異なるのでビンゴではないですが、 何かのコンパイラオプションが「_DEBUG」を暗黙に追加宣言してしまうようです。 「_DEBUG」以外でデバッグの切り分けをした方がいいみたいですね。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.5

> 早速設定を見てみましたが、確かに > プリプロセッサの定義に_DEBUGというのがありました。 この際、左側のツリーで対象のソースファイルを選択しているか、確認してみてください。 ソースファイル全体(フォルダのアイコン)に対する変更だけでは反映されなかった気もします。 プロジェクトの設定の考え方は、makefileとか、コンパイル、リンクに関する知識とかがないと、わかりにくいかも。

回答No.4

#define _DEBUG を消して、 ビルドするときに、 ○○ - Win32 Release か ○○ - Win32 Debug を選択するのでは?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#は、プリプロセッサ命令で コメントは、言語の部分ですから、 コメントアウトできていないのじゃないでしょうか 一度、その行を削除してみるか #define _DEBUG の後で #undef _DEBUG を加えるとかやってみてはどうでしょう?

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.2

> 確かにプリプロセッサの定義に_DEBUGというのがありました。 それが分かっているのなら、何も _DEBUG に拘る必要などないと思いますが… #ifdef MYDEBUG とかでは、なぜダメなんでしょうか?

hiro-long
質問者

お礼

ご返答ありがとうございます。 おっしゃる通り、_DEBUG 以外でしたら 問題なく動作できました。 今回、_DEBUG ではなぜダメなのか、というのを 知りたかったので、この部分に固執したというのもあります。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

[プロジェクト]-[設定] 「プロジェクトの設定」ダイアログ 「C/C++」タブ カテゴリ:全般 の、 プリプロセッサの定義: の中に「_DEBUG」が定義されていないか、確認してください。 ここに_DEBUGが定義されている場合、コンパイルする時に#defineされているものとして扱われます。 -- 通常、デバッグでないリリースモードでのコンパイルを行う場合、 [ビルド]-[アクティブな構成の変更] 「プロジェクトの標準構成」ダイアログ で、 ○○ - Win32 Release を選択します。 (または、[ビルド]ツールバーで切り替え可能。) 作成したプログラムの配布、数値計算を伴う実験の実施などはこちらのReleaseモードで作成した、小さくて速くてデバッグ用のライブラリを必要としないexeを利用します。

hiro-long
質問者

お礼

早速のご返答ありがとうございます。 早速設定を見てみましたが、確かに プリプロセッサの定義に_DEBUGというのがありました。 しかしながら、削除→リビルド→実行してみましたが 状況は変わりませんでした。 リリースモード用に再コンパイルして、実行してみましたが、 これまた同じように実行されてしまいます。 なんか、古い実行ファイルが残っているような 気がしないでもないのですが。。。 どれを消していいのかよくわかりませんでした。。。

関連するQ&A