- ベストアンサー
bsearch関数2回目
- bsearch関数2回目についての質問です。
- 前回の回答を参考に、柴田望洋著の新・明解C言語によるアルゴリズムとデータ構造のp105を学習しました。
- int_cmp関数の定義についての疑問と、VisualStudio2013でのデバッグ解析に関する問題について教えていただきたいです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>msvcr120d.i386.pdbが見つからない~というようなことを言われてその部分の動作を解析できません。。(コンパイルはできます) >このvsでコンパイルできない理由と意味をどなたかご教授頂けないでしょうか 自分で書かれてて違和感ありませんでした? 「コンパイルできます」といってるのに「コンパイルできない(理由)」って何? bsearch呼び出す前からステップ実行しててbsearchの処理の中に入ってってるだけじゃないかなぁ。 bsearchのソースデバッグのための情報はないでしょうから。 int_cmpにブレイクポイント設定して一気に実行させればいいだけかと。
その他の回答 (6)
- Tacosan
- ベストアンサー率23% (3656/15482)
関数名を書くと, 一部の例外を除き自動的に「当該関数へのポインタ」に変換されます. 配列名を書いたときに (これも一部の例外を除き) 自動的に「先頭要素へのポインタ」に変換されるのと同じ. だから, ただ単に int_cmp と書けば (「例外」でなければ) その関数へのポインタとなりますが, この「関数へのポインタ」は #1 にもあるように &int_cmp と書いても同じように得ることができます.
お礼
第5引数がダメなんじゃなくてbsearch関数のソースがないって言ってるんですね もう少し勉強します。。
- wormhole
- ベストアンサー率28% (1626/5665)
>以前別のプログラムをvs2005でステップインしようとしてもデバッグ情報がありませんみたいな >ことを言われて逆アセンブルになっちゃったのですが、、この辺のコンパイラの挙動の勉強って >どういう書籍、サイトをみればよいでしょうか。。 簡単にいえば、デバッグ対象のプログラムをコンパイルする際にソースからコンパイルしていない部分に関してはステップ実行時には逆アセンブルになります。 元のソースがないわけですしソースとの対応もわからないんですから。 もっと極端にいうなら、あなたがソースコードを用意してコンパイルした部分だけがソースレベルでステップ実行などできる部分です。 >あ、それで\VC\srcの中のdllファイルを指定すればデバッグ可能になるのですね >この辺は2013になっても自動では認識してもらえないということですか。 なりません。 そこにはソースがあるだけです。 コンパイル対象に含めればできるとは思いますけどbsearchなどの標準関数を何のためにデバッグするんですか?
お礼
詳しい説明ありがとうございます デバッグは語弊ですすみません あくまで途中の値とかどうなってるか挙動を解析して 理解したいのです またよろしくお願いします
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> それとも今からCは流行らないのかな・・・ デバッグ云々とCの流行り廃りとは何の関係もありません。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
>> bsearchのソースのデバッグのための情報はないでしょうから。 > この「デバッグのための情報」というのはなんなのでしょう 生成された機械語と元ソースとの対応表みたいなもん。 それがないと一行ずつ実行とかブレークポイントとか変数ウォッチとか、できない。 gccなんかだと、実行モジュールに埋め込むんだけど、VCは別ファイルなのです。
お礼
第5引数じゃなくてbsearch関数のソースがないって言ってるんですね。 もう少し勉強します。。
補足
ということは つまりbsearch関数のソースはあるけど 第5引数はあんたが書いて用意したものだから そこは知らないよ と言われた、のでしょうか それでブレークポイントを付けてステップインすると エラーが出る
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> bsearch呼び出す前からステップ実行しててbsearchの処理の中に入ってってるだけじゃないかなぁ。 あ、そゆことか。 bsearchのソースだったら <VisualStudio-install-dir>\VC\crt\src にあるはず。
お礼
あ、それで\VC\srcの中のdllファイルを指定すればデバッグ可能になるのですね この辺は2013になっても自動では認識してもらえないということですか。 それとも今からCは流行らないのかな・・・
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 定義で int *int_cmp(const int *a, const int *b) > とint_cmpの前に*は要らないのでしょうか。。 そんなことしたら int* を返す関数になっちゃうじゃないですか。 > ただ第5引数にint_cmpと書けばint_cmp関数の先頭アドレスが参照されることになってるんでしょうか。 です。厳密には &int_cmp ですけど、どっちでもOK。 > msvcr120d.i386.pdbが見つからない~ ごめんなさい、そんな現象に出くわしたことがないのでわからんです。
お礼
ありがとうございます。断定して頂けるのが助かります。 厳密には&int_cmpなんですね この辺のあいまいさはCの醍醐味とも言えるかもしれませんね
お礼
第5引数ではなくbsearch関数が別になってるからですね。 今見るとこの回答がベストアンサーです。ありがとうございました。
補足
すいません日本語間違えました。でも日本人です。。 >bsearchのソースのデバッグのための情報はないでしょうから。 この「デバッグのための情報」というのはなんなのでしょう 以前別のプログラムをvs2005でステップインしようとしてもデバッグ情報がありませんみたいな ことを言われて逆アセンブルになっちゃったのですが、、この辺のコンパイラの挙動の勉強って どういう書籍、サイトをみればよいでしょうか。。