ポインタからint型へのキャストで警告がでます。何故?VC2005 – プログラミング – Home

ポインタからint型へのキャストで警告...
 
通知
すべてクリア

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


もふ
 もふ
(@もふ)
ゲスト
結合: 18年前
投稿: 14
Topic starter  

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
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

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 ビット移植への対応)を指定
しない(いいえにする)
のどちらかだと思います。


返信引用
もふ
 もふ
(@もふ)
ゲスト
結合: 18年前
投稿: 14
Topic starter  

英語よめなす;;
YuOさん質問にお答えいただきありがとうございます。
64bit移植問題でしたか、なるほど。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました