トップページ > プログラム > 2015年12月02日 > tKolsFeX

書き込み順位&時間帯一覧

29 位/171 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000002000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
24
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net

書き込みレス一覧

スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
24 :デフォルトの名無しさん[sage]:2015/12/02(水) 18:07:06.08 ID:tKolsFeX
>>22
> ポインタのサイズと同様にそのサイズが環境に一致することを示すため
大体あってる。ポインタを安全に整数として扱うための型が INT_PTR。
64-bit 環境の Windows だと int 型が 4 バイト、ポインタが 8 バイトで
ポインタを int 型の変数に格納できない。
32-bit 環境で int 型にポインタを格納できたのはたまたま int 型とポインタ型の
サイズが一致していたから。

ついでに言うと c99 で intptr_t と uintptr_t 型が仕様として定義されている。
もしも今後 Windows 以外の環境への移植を考えるならそちらを使うようにすべき。

# どうでもいいけど、Windows SDK って何か変な型を定義してるよね
# DWORDLONG (UINT64, ULONG64, ULONGLONG 含めすべて uint64_t と同じ) とか
# HALF_PTR (intptr_t の半分のサイズ) とか LONG_PTR (INT_PTR との違いが分からん) とか
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
26 :24[sage]:2015/12/02(水) 18:47:49.06 ID:tKolsFeX
>>25
ポインタを含む任意の値を返すためだと思う。
DialogBox の戻り値は EndDialog の戻り値なわけだけど、
たとえば生成したダイアログ側から構造体を返したいとき、
戻り値が INT_PTR なら malloc とかで取ってきたアドレスをそのまま返せる。

> 32bit環境で32bit長、64bit環境で64bit長
大事なのは >>23 で言われてる通り「ポインタ型に等しい幅を持つ整数型」ということ。
いま自分が使っているシステムが主に 32/64-bit だからといって、
過去もずっとそうだったわけじゃないし将来ずっとこのままなわけでもない。
じゃあそのとき DialogBox の戻り値は何になって欲しいか、と言われれば、
「せめてポインタが格納できるサイズの型」ということになる。
それならどんな値でも返せるから。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。