• 締切済み

!とキャスト

チェックボックスがチェックされてないなら intのiに0以外を入れたいのですが、 i = !SendMessage(hchk, BM_GETCHECK, 0, 0); のように書けばいいですよね? Win32のC++ですがCのタイプの平凡なキャストを使うとして i = (int)!((BOOL)SendMessage(hchk, BM_GETCHECK, 0, 0)); こうすればよいソースになったつもりですが、どうですか?

みんなの回答

  • V36GTR
  • ベストアンサー率34% (17/49)
回答No.4

こんばんわ プログラミングは、三者三様色々な方法がありますね。だから面白いんですけど(^^ int を、ボタンの状態に、使用すること。良いソース(私の定義では、誰が見ても、分かり易く、メインテナンスがしやすいソースと、思ってます)と言うことであれば・・・ const int BTN_CHECKED=0 const int BTN_NOTCHECKED=-1 int iButton = BTN_CHECKED; if( SendMessage(hchk, BM_GETCHECK, 0, 0) != BST_CHECKED ) {   iButton = BTN_NOTCHECKED; } です。まあ、i は、例として、書かれてると、思いますが・・・(^^;;

  • takumi_xp
  • ベストアンサー率100% (1/1)
回答No.3

私的には、いくらtypedefだとはいえint型にBOOL型を代入するのはあまり気分がよいものとは感じません。なので私ならこの場合は三項演算を用いて i = ((SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED) ? 0 : 1); と書きたいところです。 『チェックされていないときは0以外』 と曖昧にするよりも、 『チェックされていたら0、チェックされてなければ1』 と明示してしまったほうが、そしてそれが明示されていることがわかるコードを書いて置く方が、あとで読み直したときにどういう値を入れているのか理解しやすいと思います。 もっとも、一般的に三項演算を推奨しているかどうかは微妙なところなので、そこのあたりは自分の信念などと考察してみてください。

  • nk2
  • ベストアンサー率23% (6/26)
回答No.2

i = SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED; i = ( SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED ); とした方がわかりやすいかなぁと・・・ SendMessage(hchk, BM_GETCHECK, 0, 0)は 2を返すことがあります。 チェックボックスが灰色に表示されているときです。 そして、 int i = !2; はfalseとみなされます。

回答No.1

> i = !SendMessage(hchk, BM_GETCHECK, 0, 0); > のように書けばいいですよね? 訊くまでもない。やってみりゃわかる。 > Win32のC++ですがCのタイプの平凡なキャストを使うとして > i = (int)!((BOOL)SendMessage(hchk, BM_GETCHECK, 0, 0)); > こうすればよいソースになったつもりですが、どうですか? キャストで誤魔化すコードのどこがよいコード? もっと素直に: i = SendMessage(hchk, BM_GETCHECK, 0, 0) == BST_CHECKED;

関連するQ&A