• 締切済み

変数の値の確認方法について

Visual Studio 2010 Express WIN32 ユニコードビルド C言語 でプログラムを勉強中なのですがデバッグ中の変数の値の確認の仕方でわからないことがあります。 下のようなプログラムを作りx=HIWORD(lParam)*2;の次の行にブレークポイントを設定しました。 この式に*2がなければxを確認すればすむ話なのですが右辺に複数の値がある場合はHIWORD(lParam)の値が確認できません。 ブレークポイントで止まった時に(lParam)の上にカーソルを移動すると32637974と表示されxの上では996と表示されました。 たぶん右側はlParamの上位ワードを取り出す前の値が表示されているのだと思います。 HIWORD(lParam)の値を事前に変数に代入していない状態で、デバッグ中に上位ワード取り出し後のlParamの値を確認する方法がありましたら教えてください。(例えばxが496でHIWORD(lParam)が32506902と表示される場合に、右のHIWORD(lParam)の上にマウスを移動すると496と表示されるようにする方法) LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { static int x; switch(message){ case WM_CREATE: break; case WM_SIZE: x=HIWORD(lParam)*2; break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }

みんなの回答

noname#212058
noname#212058
回答No.4

回答No.2 です。 > HIWORD(lParam)CXX0017: エラーです (省略) エラーが出て > うまくいきませんでした。 恐らくコードが最適化されてしまって、参照不能になっていますね。 https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/a0357e37-a366-4f66-9d35-aa49f91796f5?forum=vcgeneralja 最適化オプションを付けずにビルドしてみるとうまくいく可能性も ありますが、期待薄でしょう。マクロとデバッガの相性が悪いとしか 言いようがありません。

nazoda
質問者

補足

最適化オプションとは、「プロジェクトのプロパティ」から「構成プロパティ」「C/C++」「最適化」とたどったところにある最適化の項目のことでしょうか? そこは無効 (/Od)となっているので最適化はされていないと思います。

回答No.3

#1ですが、質問を読み間違えました。 #2の回答の通りだと思います。

noname#212058
noname#212058
回答No.2

HIWORD(lParam) までの文字列を選択状態(反転表示)にして、マウスを当てれば出てくると思いますよ。 もし、それでダメなら「クイックウオッチ」か「ウオッチ式」を使いましょう。HIWORD(lParam) までの文字列を選択状態(反転表示)にして、右クリックコンテキストから使用することができます。

nazoda
質問者

補足

HIWORD(lParam)を選択状態にしてマウスを当てても出てきませんでした。 またHIWORD(lParam)を選択状態にして右クリックからウオッチ式の追加とクイックウオッチを試してみましたが「HIWORD(lParam) CXX0017: エラーです: シンボル "HIWORD" が見つかりません」というエラーが出てうまくいきませんでした。 Visual Studio 2010Express で何か設定しなければいけない項目があるのでしょうか?

回答No.1

HIWORDとはなんでしょうか? https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms632657%28v=vs.85%29.aspx によれば指定した値の上位のword型の値をとるとのことなので、32637974 を与えたら、返り値は498ですよね。 32637974は16進数表記で1F20416、上位のwordは1f2、下位のwordは0416です。上位のwordの10進数表記は498です。 そうすると、x=HIWORD(lParam)*2;は498 * 2 = 996となってあっているとおもいますが。 > たぶん右側はlParamの上位ワードを取り出す前の値が表示されているのだと思います。 ちがいます。

関連するQ&A