警告C4309: “初始化”: 截断常量值 问题的分析和解决方案

13750 人浏览 | 时间: 2016-03-16 21:31:56 | 作者: codexia
    今天遇到了这样一个警告:
warning C4309: “初始化”: 截断常量值
    这个警告在看一个人的代码时也发现了。只是当时没有在意。不过现在我的代码中出现了,我觉得不能再无视它的存在了。对于一个追求高质量代码的程序员,是无法容忍这样的警告的。况且,如果不搞清楚,谁知道会不会给自己埋下地雷呢。所以,为了让你自己的代码更加完美,给自己铺一个更结实的路,就总结下吧。
    我的代码是这样的:
char Buf[]={0x12,0x00,0xEE,0x45};

    粗略来看,这个代码没有问题。然而VS编译器却给出了警告。既然有警告,还是有他的道理的。如果把0xEE改成0x12这样的比较小的数字,就没有问题了。那么问题就出在这个数字里了。
    难不成这个数字还能有错?0xEE的十进制值位238,而我们知道char占一个字节,也就是8位,所能表示的范围为2的8次方。当然这个范围是0-2^8(256),而238是小于256的。照理说,这是没有问题的。不要看这里用的是char,我们这里只是将char用作一个字节而已。所以我们可以无视字符形式的限制。
    然而,实际的运行逻辑并不是我们这样简单的想想而已。我们将char存储字符时,从来也不会考虑字符编码的正负问题,因为ASCII编码有效值在0-1
请微信扫码阅读。
为防止恶意爬虫,
已开启反爬机制,
理解哟~~~~
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0

相关阅读