ポインタからint型へのキャストで警告がでます。何故?VC2005

[戻る]
もふ 2006/06/12(月) 15:31:10
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なのでデータの損失などはない気がするのですが・・・

この警告の意味と、
警告を回避する書き方(警告無視設定にはしたくない)
を教えていただけないでしょうか?

よろしくお願いします。

YuO [E-Mail] 2006/06/12(月) 16:03:27
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 ビット移植への対応)を指定
しない(いいえにする)
のどちらかだと思います。

もふ 2006/06/12(月) 16:45:27
[[解決]]
英語よめなす;;
YuOさん質問にお答えいただきありがとうございます。
64bit移植問題でしたか、なるほど。

aのuintptr_tがよさげですね。
bはよくわからん設定なので時間があるときに調べてみます。

ありがとうございました。

古いスレッドには追加発言できません。