• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:bsearch関数2回目)

bsearch関数2回目

このQ&Aのポイント
  • bsearch関数2回目についての質問です。
  • 前回の回答を参考に、柴田望洋著の新・明解C言語によるアルゴリズムとデータ構造のp105を学習しました。
  • int_cmp関数の定義についての疑問と、VisualStudio2013でのデバッグ解析に関する問題について教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>msvcr120d.i386.pdbが見つからない~というようなことを言われてその部分の動作を解析できません。。(コンパイルはできます) >このvsでコンパイルできない理由と意味をどなたかご教授頂けないでしょうか 自分で書かれてて違和感ありませんでした? 「コンパイルできます」といってるのに「コンパイルできない(理由)」って何? bsearch呼び出す前からステップ実行しててbsearchの処理の中に入ってってるだけじゃないかなぁ。 bsearchのソースデバッグのための情報はないでしょうから。 int_cmpにブレイクポイント設定して一気に実行させればいいだけかと。

tranceporter
質問者

お礼

第5引数ではなくbsearch関数が別になってるからですね。 今見るとこの回答がベストアンサーです。ありがとうございました。

tranceporter
質問者

補足

すいません日本語間違えました。でも日本人です。。 >bsearchのソースのデバッグのための情報はないでしょうから。 この「デバッグのための情報」というのはなんなのでしょう 以前別のプログラムをvs2005でステップインしようとしてもデバッグ情報がありませんみたいな ことを言われて逆アセンブルになっちゃったのですが、、この辺のコンパイラの挙動の勉強って どういう書籍、サイトをみればよいでしょうか。。

その他の回答 (6)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.7

関数名を書くと, 一部の例外を除き自動的に「当該関数へのポインタ」に変換されます. 配列名を書いたときに (これも一部の例外を除き) 自動的に「先頭要素へのポインタ」に変換されるのと同じ. だから, ただ単に int_cmp と書けば (「例外」でなければ) その関数へのポインタとなりますが, この「関数へのポインタ」は #1 にもあるように &int_cmp と書いても同じように得ることができます.

tranceporter
質問者

お礼

第5引数がダメなんじゃなくてbsearch関数のソースがないって言ってるんですね もう少し勉強します。。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.6

>以前別のプログラムをvs2005でステップインしようとしてもデバッグ情報がありませんみたいな >ことを言われて逆アセンブルになっちゃったのですが、、この辺のコンパイラの挙動の勉強って >どういう書籍、サイトをみればよいでしょうか。。 簡単にいえば、デバッグ対象のプログラムをコンパイルする際にソースからコンパイルしていない部分に関してはステップ実行時には逆アセンブルになります。 元のソースがないわけですしソースとの対応もわからないんですから。 もっと極端にいうなら、あなたがソースコードを用意してコンパイルした部分だけがソースレベルでステップ実行などできる部分です。 >あ、それで\VC\srcの中のdllファイルを指定すればデバッグ可能になるのですね >この辺は2013になっても自動では認識してもらえないということですか。 なりません。 そこにはソースがあるだけです。 コンパイル対象に含めればできるとは思いますけどbsearchなどの標準関数を何のためにデバッグするんですか?

tranceporter
質問者

お礼

詳しい説明ありがとうございます デバッグは語弊ですすみません あくまで途中の値とかどうなってるか挙動を解析して 理解したいのです またよろしくお願いします

回答No.5

> それとも今からCは流行らないのかな・・・ デバッグ云々とCの流行り廃りとは何の関係もありません。

回答No.4

>> bsearchのソースのデバッグのための情報はないでしょうから。 > この「デバッグのための情報」というのはなんなのでしょう 生成された機械語と元ソースとの対応表みたいなもん。 それがないと一行ずつ実行とかブレークポイントとか変数ウォッチとか、できない。 gccなんかだと、実行モジュールに埋め込むんだけど、VCは別ファイルなのです。

tranceporter
質問者

お礼

第5引数じゃなくてbsearch関数のソースがないって言ってるんですね。 もう少し勉強します。。

tranceporter
質問者

補足

ということは つまりbsearch関数のソースはあるけど 第5引数はあんたが書いて用意したものだから そこは知らないよ と言われた、のでしょうか それでブレークポイントを付けてステップインすると エラーが出る

回答No.3

> bsearch呼び出す前からステップ実行しててbsearchの処理の中に入ってってるだけじゃないかなぁ。 あ、そゆことか。 bsearchのソースだったら <VisualStudio-install-dir>\VC\crt\src にあるはず。

tranceporter
質問者

お礼

あ、それで\VC\srcの中のdllファイルを指定すればデバッグ可能になるのですね この辺は2013になっても自動では認識してもらえないということですか。 それとも今からCは流行らないのかな・・・

回答No.1

> 定義で int *int_cmp(const int *a, const int *b) > とint_cmpの前に*は要らないのでしょうか。。 そんなことしたら int* を返す関数になっちゃうじゃないですか。 > ただ第5引数にint_cmpと書けばint_cmp関数の先頭アドレスが参照されることになってるんでしょうか。 です。厳密には &int_cmp ですけど、どっちでもOK。 > msvcr120d.i386.pdbが見つからない~ ごめんなさい、そんな現象に出くわしたことがないのでわからんです。

tranceporter
質問者

お礼

ありがとうございます。断定して頂けるのが助かります。 厳密には&int_cmpなんですね この辺のあいまいさはCの醍醐味とも言えるかもしれませんね