前回回答いただいた皆さんありがとうございました。
自分なりに勉強したところ、柴田望洋著 新・明解C言語によるアルゴリズムとデータ構造
のp105に解説を発見し、kmeeさんの回答からキャストの定義を学び、理解できました。
第5引数の比較関数なのですが、定義で int *int_cmp(const int *a, const int *b)
とint_cmpの前に*は要らないのでしょうか。。ただ第5引数にint_cmpと書けばint_cmp関数の先頭アドレスが参照されることになってるんでしょうか。
それと MillenniuM さんの宿題のような比較関数
int int_cmp(const void* x, const void* y) {
return *(int*) x - *(int*) y;
}
の*(int*)x - *(int*)y;
の部分をVisualStudio2013でデバッグ解析しようとすると
msvcr120d.i386.pdbが見つからない~というようなことを言われてその部分の動作を解析できません。。(コンパイルはできます)
このvsでコンパイルできない理由と意味をどなたかご教授頂けないでしょうか
No.2ベストアンサー
- 回答日時:
>msvcr120d.i386.pdbが見つからない~というようなことを言われてその部分の動作を解析できません。
。(コンパイルはできます)>このvsでコンパイルできない理由と意味をどなたかご教授頂けないでしょうか
自分で書かれてて違和感ありませんでした?
「コンパイルできます」といってるのに「コンパイルできない(理由)」って何?
bsearch呼び出す前からステップ実行しててbsearchの処理の中に入ってってるだけじゃないかなぁ。
bsearchのソースデバッグのための情報はないでしょうから。
int_cmpにブレイクポイント設定して一気に実行させればいいだけかと。
この回答への補足
すいません日本語間違えました。でも日本人です。。
>bsearchのソースのデバッグのための情報はないでしょうから。
この「デバッグのための情報」というのはなんなのでしょう
以前別のプログラムをvs2005でステップインしようとしてもデバッグ情報がありませんみたいな
ことを言われて逆アセンブルになっちゃったのですが、、この辺のコンパイラの挙動の勉強って
どういう書籍、サイトをみればよいでしょうか。。
No.7
- 回答日時:
関数名を書くと, 一部の例外を除き自動的に「当該関数へのポインタ」に変換されます.
配列名を書いたときに (これも一部の例外を除き) 自動的に「先頭要素へのポインタ」に変換されるのと同じ.
だから, ただ単に int_cmp と書けば (「例外」でなければ) その関数へのポインタとなりますが, この「関数へのポインタ」は #1 にもあるように &int_cmp と書いても同じように得ることができます.
No.6
- 回答日時:
>以前別のプログラムをvs2005でステップインしようとしてもデバッグ情報がありませんみたいな
>ことを言われて逆アセンブルになっちゃったのですが、、この辺のコンパイラの挙動の勉強って
>どういう書籍、サイトをみればよいでしょうか。。
簡単にいえば、デバッグ対象のプログラムをコンパイルする際にソースからコンパイルしていない部分に関してはステップ実行時には逆アセンブルになります。
元のソースがないわけですしソースとの対応もわからないんですから。
もっと極端にいうなら、あなたがソースコードを用意してコンパイルした部分だけがソースレベルでステップ実行などできる部分です。
>あ、それで\VC\srcの中のdllファイルを指定すればデバッグ可能になるのですね
>この辺は2013になっても自動では認識してもらえないということですか。
なりません。
そこにはソースがあるだけです。
コンパイル対象に含めればできるとは思いますけどbsearchなどの標準関数を何のためにデバッグするんですか?
詳しい説明ありがとうございます
デバッグは語弊ですすみません
あくまで途中の値とかどうなってるか挙動を解析して
理解したいのです
またよろしくお願いします
No.4
- 回答日時:
>> bsearchのソースのデバッグのための情報はないでしょうから。
> この「デバッグのための情報」というのはなんなのでしょう
生成された機械語と元ソースとの対応表みたいなもん。
それがないと一行ずつ実行とかブレークポイントとか変数ウォッチとか、できない。
gccなんかだと、実行モジュールに埋め込むんだけど、VCは別ファイルなのです。
この回答への補足
ということは
つまりbsearch関数のソースはあるけど
第5引数はあんたが書いて用意したものだから
そこは知らないよ
と言われた、のでしょうか
それでブレークポイントを付けてステップインすると
エラーが出る
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が見つからない~
ごめんなさい、そんな現象に出くわしたことがないのでわからんです。
ありがとうございます。断定して頂けるのが助かります。
厳密には&int_cmpなんですね
この辺のあいまいさはCの醍醐味とも言えるかもしれませんね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
デコンパイル?について
-
エクセルVBAではRound...
-
Makefile作成時の拡張子.oとは?
-
” OS ビルド ” の意味が分か...
-
セミコロンについて
-
クリティカルエラー Expressio...
-
コンパイルエラー:ユーザ定義...
-
PRO*C コンパイルエラー
-
RPGでプログラムからソースファ...
-
VS2010でLibHaruをビルドした...
-
C++コンパイル時に『 C1083: in...
-
pyc 編集 閲覧
-
構造体をファイルに出力できません
-
定数式とはどういう意味でしょ...
-
C言語でヘッダファイルにグロー...
-
コンパイル??
-
[c++] <pthread.h>がinclude で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
エクセルVBAではRound...
-
「fatal error C1189」を回避す...
-
Makefile作成時の拡張子.oとは?
-
ILSpyで、デコンパイルできない。
-
1 つ以上の複数回定義されてい...
-
外部シンボル "_main"は未解決です
-
セミコロンについて
-
C言語でヘッダファイルにグロー...
-
” OS ビルド ” の意味が分か...
-
マクロ コンパイルがグレーバック
-
【VC++6.0(MFC)】警告「LINK : ...
-
クリティカルエラー Expressio...
-
PRO*C コンパイルエラー
-
[c++] <pthread.h>がinclude で...
-
<math.h>があるのにsqrtが・...
-
ビルドとリビルドの違いを教え...
-
CImageクラスの使用について
-
戻り値について
-
コンパイルエラー:ユーザ定義...
おすすめ情報