Vs2010与VC的区别

2023-05-16

VS2010与VC++编译器的区别:


1.VS2010并不是针对C++的,C++只是它的一小部分,它更加关注.net平台程序开发(主要是C#、VB,C++/CLI(C++在.net下的语言)),而VC++6.0是专注与C++开发,或者说VC6只能开发C++程序,在VC6.0时期还没有.net


2.vc6对最新的C++的标准完全不支持,STL的支持也有缺陷,更加不支持可变参数宏
  vc2010能够支持部分C++的特性,完全支持STL,同时支持可变参数宏


3.vs2010添加很多微软.NET的新特性,支持更多种类的资源文件,帮助文档也非常丰富,相较于vc6更加适合开发软件产品。
  vc6里面对COM的使用和后面的vc版本都有一些区别,这些可能导致以后在工作中遇到麻烦。另外,vc6对win7及其之后的版本支持并不好,很容易发生不兼容的情况。




4.默认编码不同,VC6默认是ansi,文件小速度慢。VS2010默认是unicode,文件大速度快
后者错误好找不用编译就出来了,bug少,更先进更强大,vc6有bug,但是编译快,文件相对较小


5.vs2010开发出来的程序可以自动根据特定的CPU翻译成高效的目标代码,VC6开发出来的程序,要想换成其它的CPU必须要重新开发




6.VC6的界面老旧,操作复杂,不完全符合C++的安全标准,但是是底层语言,与操作系统良好结合,使用广泛;VS2010可视化界面,安全可靠,支持C++标准,部署简


7.VS2010自带了winsock2库(第2版的库),每次都不用加Ws2_32.lib


MSDN online


移植的问题:
1.高级的编译器,在同一个基础下开发后,由于向前兼容,可以打开原始编译的工作平台


2.环境变量与宏设置
_WIN32_WINNT 与_WIN32_IE 设置冲突
设定的windows平台版本,与安装配置的ADK不相符合
#if _MSC_VER <= 1200 // MFC 6.0 or earlier


3.MFC出现的时候STL还没有成为C++的标准,所以MFC使用一套自己的模版库,比如CArray、CList、CMap等等,这些类型声明都在afximpl.h文件中。




4.为了显著增加CRT库的安全性,许多CRT函数都有了一个更安全的新版本,新版本和旧版本的区别就是新版本函数名多了一个_s后缀。鼓励使用安全切最新的版本,但是参数等变化很大,调整需要很多时间。


  可以使用#pragma warning( disable : 4996 )预处理指令解除警告


5.新旧版本的MFC以及界面控件?中对ON_MESSAGE消息映射宏定义不同


旧版:
#define ON_MESSAGE(message, memberFxn) / 


{ message, 0, 0, 0, AfxSig_lwl, / 


(AFX_PMSG)(AFX_PMSGW)(LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, 


LPARAM))&memberFxn }, 


新版:
#define ON_MESSAGE(message, memberFxn) / 


{ message, 0, 0, 0, AfxSig_lwl, / 


(AFX_PMSG)(AFX_PMSGW) / 


(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > / 


(memberFxn)) },


新的
ON_MESSAGE宏使用C++的?static_cast?操作符代替了C类型的强制转换。


用户没有按照ON_MESSAGE宏的约定声明来定义消息响应函数,就会造成错误


旧版:
#define?ON_WM_NCHITTEST()?/?


{?WM_NCHITTEST,?0,?0,?0,?AfxSig_wp,?/?


(AFX_PMSG)(AFX_PMSGW)(UINT(AFX_MSG_CALL?CWnd::*)(CPoint))&OnNcHitTest?},?
新版:
#define ON_WM_NCHITTEST() / 
{ WM_NCHITTEST, 0, 0, 0, AfxSig_l_p, / 
(AFX_PMSG)(AFX_PMSGW) / 
(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(CPoint) > (&ThisClass :: 
OnNcHitTest)) },


返回值类型由UINT改成了LRESULT,再加上static_cast的严格检查而出错


6.新的C++编译器不再支持默认类型的变量定义


7.for 语句的变量作用域问题


8.strchr(_tcschr)、strpbrk(_tcspbrk ??)、strrchr(_tcsrchr)和strstr(_tcsstr)这四个函数在VC6的CRT库中定义的返回值都是char *(TCHAR *),所以以前的代码通常是这样使用的:TCHAR *cp = _tcschr( pszPath, _T('//') ); //使用*cp,可以通过cp指针修改pszPath的内容这其实是一个“漏洞”,因为如果pszPath是const char(TCHAR) *字符串,那么就表示它不希望修改字符串的内容,但是调用strchr(_tcschr函数后就可以通过cp指针修改其内容了,这岂不荒谬?所有在新版本的CRT库中,这几个函数的返回值都改成const char *。


9.wchar_t *类型与USHORT *的转换错误
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vs2010与VC的区别 的相关文章

随机推荐

  • linux下命令行方式的音量控制

    输入命令 xff1a alsamixer xff1b 设置系统音量 xff0c 这个百分比会有一定的误差存在 amixer set Speaker 100 设置系统麦克风 amixer set Mic 100 c 43 43 代码可以执行运
  • Ubuntu检测ip有效性 且 修改系统ip

    正则表达式实现检测IP地址是否有效 bool UntilTool CheckIPAddrIsVaild string str regex check ip 34 25 0 5 2 0 4 0 9 1 0 9 0 9 1 9 0 9 1 9
  • clion同一个项目创建多个可执行文件

    简述需求 xff1a 需要写多个可执行文件 xff0c 但是文件一些工具类等都是通用的 xff0c 比较麻烦的就是创建多个项目 xff0c 下来让你一个项目中生成多个可执行文件 xff0c 用到那个编译那个就可以了 默认创建好项目后 xff
  • Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(Windows)【真正的小白版】

    写在前面的前面 xff1a 这篇文章vscode和cpp插件版本有点老了 xff0c 仅供大家参考 xff0c 最新的和最详细的更新见我的另一篇文章 xff1a https blog csdn net bat67 article detai
  • linux服务端下的c++ udp socket demo

    linux服务端 udp socket demo 如下 xff1a 创建接受数据的socket int iSock 61 socket PF INET SOCK DGRAM 0 printf 34 socket ss d n 34 iSoc
  • ROS个别命令的使用 ros ros2

    ros1 录包 rosbag record a O filename bag 解释 xff1a a是把所有的包都进行录制 xff0c O表示后面需要跟输出的文件名字 xff0c o的话系统会自己添加录制日期为文件名上 xff1b rosba
  • 浅析 自动驾驶、遥控驾驶、平行驾驶区别

    以下内容仅为个人粗浅理解 xff0c 欢迎大家留言指正 图片内容来源于互联网 xff0c 图片权利归图片作者所有 xff0c 本文仅引用 自动驾驶 xff1a 重点在车端 xff0c 自动驾驶相关资源部署在车端 xff0c 或大部分算力等都
  • CNN图像分割简史:从R-CNN到Mask R-CNN(译)

    一直想总结一下CNN在图像分割中的发展脉络 xff08 主要是R CNN及其改进方法 xff09 xff0c 看到一篇不错的英文博文 A Brief History of CNNs in Image Segmentation From R
  • c: __FILE__, __LINE__

    这是编译器内置宏 xff0c 这些宏定义不仅可以帮助我们完成跨平台的源码编写 xff0c 灵活使用也可以巧妙地帮我们输出非常有用的调试信息 注意 xff0c 是双下划线 xff0c 而不是单下划线 FILE 包含当前程序文件名的字符串 LI
  • 当数组遇到mybatis in 的时候

    我想实现 多个id 传入sql 语句 的操作 1 我试着将数组 stringUtils join 数组 34 34 数组转string 并以逗号分隔 没成功 因为传到sql 里是 123 234 435 xff0c 而我们需要的是 123
  • jeesite中的ztree应用

    话不多说 xff0c 直接开始一二三 jeesite页面上通过以自定义jstl lt sys treeselect gt 方式引入树形选择 1 lt sys treeselect id 61 34 company 34 name 61 34
  • getByte()用法小结

    在Java中 xff0c String的getBytes 方法是得到一个操作系统默认的编码格式的字节数组 这个表示在不同情况下 xff0c 返回的东西不一样 xff01 String getBytes String decode 方法会根据
  • plsql 导出表和表数据

    导出数据表结构 打开pl sql客户端 Tools Export User Objects xff08 工具 导出用户对象 xff09 按图选择自己需要导出的表 xff0c 在选择导出文件位置 导出表数据 Tools Exports Tab
  • String的按值传递,java传参都是传值

    看完绝对清晰 java中对象作为参数传递给一个方法 xff0c 到底是值传递 xff0c 还是引用传递 xff1f pdd xff1a 所谓java只有按值传递 xff1a 基本类型 值传递 xff1b 引用类型 xff0c 地址值传递 x
  • Bili视频弹幕播放器后台源码

    介绍 此款播放器源码添加及修复了很多功能 xff0c 且所有源码均本地化 xff0c 不存在外链的情况 xff0c 测试环境 xff1a PHP7 0 43 MySQL5 6 播放器跨域远程下一集代码 xff1a 说明 xff1a 就是你的
  • 小程序与java的session问题

    一般web开发中 xff0c 我们需要通过session将数据用户重要数据存储到session中 xff0c 而由于html自带cookie xff0c 能够帮助我们存储从服务器端发送jsessionid到客户端浏览器 xff0c 客户端发
  • mac下java开发环境配置

    1 下载并安装jdk xff0c 配置环境变量 jdk1 8下载地址 xff1a http www oracle com technetwork java javase downloads jdk8 downloads 2133151 ht
  • 数组协变

    在某些情况下 xff0c 即使某个对象不是数组的基类型 xff0c 我们也可以把它赋值给数组元素 这种属性叫做协变 xff08 covariance xff09 在下面的情况下可以使用协变 xff1a 数组是引用类型数组 在赋值的对象类型和
  • 策略模式

    策略模式 由于最近在研究学习设计模式 xff0c 我会用自己的理解方式来表述对设计模式的学习和认识 xff0c 通过最常用 好记的案例来记住和使用设计模式 xff0c 希望对设计代码方面有所提高和改进 一 应用背景 在软件开发中常常遇到这种
  • Vs2010与VC的区别

    VS2010与VC 43 43 编译器的区别 xff1a 1 VS2010并不是针对C 43 43 的 xff0c C 43 43 只是它的一小部分 xff0c 它更加关注 net平台程序开发 xff08 主要是C VB xff0c C 4