VC.net 2005
Win32 プラットフォームSDK
の環境でプログラミングしています。
typedef unsigned int u_int;
u_int *p = addr;
u_int n = (u_int)p;
と書かれたプログラムをコンパイルすると、
u_intにキャストしてる行で、
warning C4311: '型キャスト' : ポインタを 'u_int *' から 'u_int' へ切り詰めます。
という警告が発生します。
これはどういったい警告なのでしょうか?
「切り詰めます」という表現がめちゃめちゃ気になります。
sizeof(u_int*)
sizeof(u_int)
とやるとどちらも4byteなのでデータの損失などはない気がするのですが・・・
この警告の意味と、
警告を回避する書き方(警告無視設定にはしたくない)
を教えていただけないでしょうか?
よろしくお願いします。
http://msdn2.microsoft.com/en-us/4t91x2k5.aspx
http://msdn2.microsoft.com/en-us/yt4xw8fh.aspx
64bit環境に移行した場合に問題が起きるので,事前に警告してくれています。
解決策は,
a.) uintptr_tのような移植可能な型を利用する
b.) /Wp64オプション(構成プロパティ - C/C++ - 全般 - 64 ビット移植への対応)を指定
しない(いいえにする)
のどちらかだと思います。
英語よめなす;;
YuOさん質問にお答えいただきありがとうございます。
64bit移植問題でしたか、なるほど。
aのuintptr_tがよさげですね。
bはよくわからん設定なので時間があるときに調べてみます。
ありがとうございました。