vc6 code migrate to vs2010

vc6 和vs2010相比,C++标准已经发生了较大的变化,而且VC6编译器可能有不少不严谨的地方,在搬移过程中应当注意:

1。 for循环语句内部定义的循环变量。VC6定义在语句外部,vs2010在语句内部。

2。 #pragma pop(n) 对vc6实际不起作用,但是vs2010时起作用的。这样会改变以后代码数据的对齐。

3。vs2010不允许char->int->float->double的默认向上转换。所有类型不匹配的地方都会无法编译通过。这个改变在我看来非常没有道理,据说在更新的版本中,有已经改回来了。

4。stl 大幅修改。一个比较明显的变化: VC6传递stl对象实际上采用的是shallow copy, 也就是对象内部指针指向的内容并没有被拷贝。但在vs2010下面,对象传递为deep copy. 比如std::string的传递,如果要改变指针指向的内容,如果采用的值传递,将无法得到效果。这方面解决的办法最好是严格遵循C++规范,如果要改变被传递的对象,最好使用引用或者指针,如果没有被改变,最好采用const reference. 否则deep copy 的效率也是个严重的问题。

5。MFC消息回调函数返回值改为LRESULT

6。更严格的堆栈检查。函数内部local变量越界在VC6经常无法发现,但在vs2010中必定出错。

7。 对一些字符串函数,vs2010都建议使用对应的安全字符串函数。大多数情况下用户可以忽略这一警告。

总的来说这个搬移主要问题出现在:

其一:语法规则的改变导致的编译错误。

其二:由于stl以及一些库的改变导致的行为改变,从而使程序运行不正常,这类问题一般需要更多的时间和精力。

其三:vs2010更严格的标准可能导致原来可能工作的代码不再正确。这是好事,可以找出一些原来代码的隐患。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值