- ベストアンサー
VC Debugモード
Visual Stdio .NET 2003 環境のDebugモードについて質問があります。 開発言語は C++です。 今、コマンドライン引数を以下のように設定し、ファイルに保存された 情報を処理するプログラムを作成しています。 test1.exe 0 ./input.txt ↑ [実行ファイル名][検索したい文字][処理したいファイルへのパス] 上のように入力した場合、argcは[3]を返すと思うのですが、Debug モードでいざ実行してみると、値は「4」となっていました。 コマンドライン引数はVCの「プロジェクト」→「**のプロパティ」 →左ウィンドウの「デバッグ」→右ウィンドウの「コマンド引数」に 上のように設定しています。 また、Debugモードでargv[0]を調べたところ、実行ファイルまでのパス が保存されていました。 なぜ、このようになるのでしょうか? あと本題からそれるのですが、ソースの中でVCがDebugモードで動作していることを知る方法はないでしょうか? もし、Debugモードなのかどうかがわかるのであれば、ソースをDebug モード用とReleseモード用とに切り替えられるようにしたいのですが。。。 合わせてお教えください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
プロジェクトのプロパティ→デバッグ→コマンド引数、には、実行ファイル名は不要です。つまり、1つ余計に引数を指定してしまったわけです。 test.exeを含めなければ、argcは希望通り3となります。 > また、Debugモードでargv[0]を調べたところ、実行ファイルまでのパス が保存されていました。 そういうものです。Debugモードに限らず、argv[0]は実行ファイルのパスが保存されます。 詳細は、argv[0] をキーワードとしてWeb検索してみて下さい。 > あと本題からそれるのですが、ソースの中でVCがDebugモードで動作していることを知る方法はないでしょうか? Debugモードでは定数 _DEBUG が定義されています。Releaseモードでは定義されていません。 ですので、Debugモードだけで動作させたいコードは、以下の#ifdef ~ #endifで囲みましょう。 #ifdef _DEBUG #endif より詳しい使い方は、#ifdef でWeb検索してみて下さい。
その他の回答 (1)
- MrBan
- ベストアンサー率53% (331/615)
> そういうものです。Debugモードに限らず、argv[0]は実行ファイルのパスが保存されます。 VCを含む多くのコンパイラはこうなります。 但し、言語規格上はフルパスになるか、ファイル名だけになるか等の保証がありません。コンパイラ次第です。 また、空文字列("")でもかまいませんので、実行パスが存在しない場合や、意味が無い環境などはこうなることもあります。
お礼
ありがとうございました。
お礼
ありがとうございました。