プロが教えるわが家の防犯対策術!

こんにちは。

Win2000、VC++6.0使用。

今までC言語でプログラムを組んではいましたが、

#define _DEBUG

#ifdef _DEBUG
print(...);
#endif

というようにデバッグ用のコードを入れたことはありませんでした。
このような便利なものがあると知り、早速使ってみたのですが、

#define _DEBUG
の一文をコメントアウトして、再コンパイル(リビルド)
して実行してみたのですが、
普通に
#ifdef _DEBUG
#endif
で囲まれた部分が実行されてしまいます。
#define _DEBUG
を宣言しなければ、実行されないと思っていたのですが
自分の勘違いでしょうか?

よくわかりません。
どなたかご存知の方、よろしくお願いします。

A 回答 (6件)

自分も同じことをして悩んでたのですが、なんとなくわかったので書いておきます。



http://www.mnc.co.jp/intime/user/intimedev.php?I …
↑環境が異なるのでビンゴではないですが、
何かのコンパイラオプションが「_DEBUG」を暗黙に追加宣言してしまうようです。
「_DEBUG」以外でデバッグの切り分けをした方がいいみたいですね。
    • good
    • 1

> 早速設定を見てみましたが、確かに


> プリプロセッサの定義に_DEBUGというのがありました。

この際、左側のツリーで対象のソースファイルを選択しているか、確認してみてください。
ソースファイル全体(フォルダのアイコン)に対する変更だけでは反映されなかった気もします。

プロジェクトの設定の考え方は、makefileとか、コンパイル、リンクに関する知識とかがないと、わかりにくいかも。
    • good
    • 1

#define _DEBUG を消して、


ビルドするときに、
○○ - Win32 Release

○○ - Win32 Debug
を選択するのでは?
    • good
    • 0

#は、プリプロセッサ命令で


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

> 確かにプリプロセッサの定義に_DEBUGというのがありました。



それが分かっているのなら、何も _DEBUG に拘る必要などないと思いますが…

#ifdef MYDEBUG とかでは、なぜダメなんでしょうか?
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

おっしゃる通り、_DEBUG 以外でしたら
問題なく動作できました。

今回、_DEBUG ではなぜダメなのか、というのを
知りたかったので、この部分に固執したというのもあります。

お礼日時:2004/11/02 22:54

[プロジェクト]-[設定]


「プロジェクトの設定」ダイアログ
「C/C++」タブ
カテゴリ:全般
の、
プリプロセッサの定義:
の中に「_DEBUG」が定義されていないか、確認してください。

ここに_DEBUGが定義されている場合、コンパイルする時に#defineされているものとして扱われます。

--
通常、デバッグでないリリースモードでのコンパイルを行う場合、

[ビルド]-[アクティブな構成の変更]
「プロジェクトの標準構成」ダイアログ
で、
○○ - Win32 Release
を選択します。
(または、[ビルド]ツールバーで切り替え可能。)

作成したプログラムの配布、数値計算を伴う実験の実施などはこちらのReleaseモードで作成した、小さくて速くてデバッグ用のライブラリを必要としないexeを利用します。
    • good
    • 1
この回答へのお礼

早速のご返答ありがとうございます。

早速設定を見てみましたが、確かに
プリプロセッサの定義に_DEBUGというのがありました。

しかしながら、削除→リビルド→実行してみましたが
状況は変わりませんでした。
リリースモード用に再コンパイルして、実行してみましたが、
これまた同じように実行されてしまいます。
なんか、古い実行ファイルが残っているような
気がしないでもないのですが。。。
どれを消していいのかよくわかりませんでした。。。

お礼日時:2004/11/02 21:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!