1月中旬——vs的各种警告集合

说起来,程序员界有一个梗,程序员只认识error不认识warning,但是其实,有一些warning很可能是bug的根源,或者说是潜在的问题,过多无意义的warning也会覆盖真正有意义的bug。因此,有能力,谨慎的程序员应该避免写出有warning的代码。

下面,集中介绍几种我在windows c++编程中遇到的warning:

1.非常量引用的初始值必须是左值

int fun(Object& object);
//调用:
int nOut = fun(new Object());

d当函数使用引用而不是常量引用时,编译器认为会在函数内部修改该参数的值,而传入一个右值(比如说一个临时变量),后面则无法再使用,编译器则认为你做错了。——因此不修改的引用最好使用常量引用,或者避免传入右值

2. warning C4800: “BOOL”: 将值强制为布尔值“true”或“false”(性能警告)

在windows中,BOOL其实是一个宏,其实它是一个int,为0就是false, 否则为true。和c++的bool是不等同的。为了避开此警告可以使用:

BOOL bIsOk = FALSE;
bool bIs = bIsOk != FALSE;

3. warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

936对应的是GBK编码,该文件中可能存在必须以Unicode编码才能识别的字符,在GBK可能会乱码。不过这个修改目前还不知道能不能上传到git上。

4. warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa.

有很多类似的函数: strcpy, spintf等函数,当使用安全开发原则时,vs都会弹出警告,让你使用加了 “_s”的函数。

5. warning C4010: 单行注释包含行继续符

在此处看看是不是有语法疏漏

6.  warning C4018: “<”: 有符号/无符号不匹配

有符号和无符号是可以互相转换,而且不会丢失信息的(超过合法范围只是不会正常显示而已,再次强转就可以正常显示),但是不可以进行比较操作。

7. warning C4002: “MF_CSProt_S2C_LogEx”宏的实参太多

8. warning C4127: 条件表达式是常量

9.数据类型截断: 比如说把long long强转成int, 高32位的信息就丢失了。

10. warning C4068: 未知的杂注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值