知识大全 Visual C++ 2005中的突破性变化

Posted 函数

篇首语:傲不可长,欲不可纵,乐不可极,志不可满。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Visual C++ 2005中的突破性变化相关的知识,希望对你有一定的参考价值。

Visual C++ 2005中的突破性变化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Microsoft Visual C++ 是微软公司Visual Studio 开发套件中的一出重头戏 与前一个版本相比 其革新性的集成开发环境与C++编译器 带来了有许多改变 在本文中 主要讲解程序员在升级程序时 可能会遇到的一些不同之处及变化 而这些变化很可能会使老一点的程序不能通过编译 总之 这些变化绝不是偶然发生的 其背后都有强大的理论依据在支撑 所以 使用Visual C++的程序员 在升级之前 一定要弄清楚这些变化   Visual C++中已经发生的变化  微软Visual C++工作小组在对其产品作出修改之前 已经过充分的考虑 同时也顾及到了这些改变会对以前的代码造成的影响 虽然如此 但有以下理由支持在新版本中作出的这些改变   Visual C++ 其中一个最重要之处 就是更加遵循ISO C++标准 可更好地跨平台移植代码 或集成进其他工具中 如声明在for循环中的变量生命期及变量类型现在也遵循C++标准了 而且 在默认设置中 就是遵循ISO C++标准的 正是因为此 在一些老代码中 过去可行的一些方法 现在可能要作出必要的修改 才能通过编译了   在这几年中 安全性是一个热门的话题 而且在将来也会得来越来越多的重视 C++语言赋于了程序员无所不能的能力 但凡事总有两面性 为减少代码中的安全问题 也为减少代码中错误产生的可能性 Visual C++ 作出了一系列的改变 首先 引入了安全CRT及不推荐使用的非安全API等概念 而且在默认状态下 Visual C++ 也会进行代码安全检查   Visual C++ 增强了适用性 这也使得可更方便地升级本身的二进制代码成为可能 而且 也更加容易进行产品的漏洞修补   可维护性也是一个促进Visual C++变化的原因之一 例如 低价值的功能已经从产品中消失 以减少在将来维护它们的可能性 一个例子就是 Visual Studio 中已经移除了单线程CRT 因为已经不再需要它了 以前为维护单线程CRT所花费的时间 现在可以用在更重要的事情上了   最后 其中的某些变化 是为了增强Visual C++编译器的可靠性 为达此目的 微软公司此次保证了Visual C++中有明确定义并一致的行为   当然 也要避免某些变化 此次Visual C++的大多数变化都是在代码安全层面上 如果这些变化向后影响到二进制代码的兼容性 那么就会尽量避免 因为源代码兼容性总是在二进制代码兼容性之前被发现的 另外 如果某些变化致使人们不想采用或升级到 版 那么这种变化也要避免 因为这会导致软件项目的总成本增加 最后 编写代码方式的改变也要在成本上证明是值得的 否则 就没有必要去实现它了

  Visual C++库的十项突破性变化  Visual C++ 库已经发生了一系列的变化 可能会对现有的程序有所影响 在升级到Visual C++ 之前 必须要确定程序中没有这些问题    参数的有效性  在C运行时库中 加入了一些代码 以检查参数的有效性 例如 如果传递的目标缓冲区大小不足以strcpy使用 通常这是在冒安全风险 而新版本此时则会调用一个非法参数处理程序 在release版中 会调用Dr Watson 而在debug版中 会产生断言(assert) 当然 只要程序中传递的参数都是有效的 就不会有什么问题了    对非安全API的警告  在Visual C++ 中 CRT中的一组函数已不再建议使用 而应使用新提供的安全版本 大多数这些不建议使用的函数如果使用不当 将会导致缓冲区溢出或其他安全问题 这些函数如 strcpy strcat等等 这些函数新的安全版本都在函数名后加了一个_s后缀 以方便识别 如strcpy_s wcscpy_s mbscpy_s calloc_s和strcat_s这些函数   如果想继续使用老版本 非安全的函数 可在源代码开始处加上#define value of _CRT_SECURE_NO_DEPRECATE(此处value代表某一数值) 然而 还是建议大家升级代码使用新的安全函数    迭代器越界  受检查的迭代器(checked iterators)和调试迭代器(debug iterators)也因为安全的原因进行了相应的更新 如果迭代器越界 则相应会调用一个非法参数处理程序   再次提醒 可以通过抛出一个越界异常来避免产生非法参数问题 在代码中加入#define value of _SECURE_SCL_THROWS 并把value值设为 这样就不会调用非法参数处理程序 而是产生一个异常了   也可以通过设置#defined value of _SECURE_SCL值为零 关闭此迭代器检查 通常默认情况下 此选项是打开的    time_t类型  time_t类型通常用于显示从 年开始以来的秒数 直到Visual C++ (即Visual C++ ) time_t类型都被定义为一个long 而到了Visual C++ 中 已被定义为一个 位类型 可用于显示一直到 年的时间了    链接到CRT  托管应用程序现在不能静态链接到CRT 以往 在Visual C++ 和 中(指Visual Studio NET 与 ) 可以生成静态链接到CRT的CLR程序 而在Visual Studio 却行不通

   单线程CRT支持  在Visual Studio 中 已经取消了单线程CRT支持 而且用发展的眼光来看 未来大多数的人还是愿意使用线程安全的多线程代码 在线程中 可使用_nolock后缀来优化代码 但同时 这些函数是非线程安全的    异常处理  有两种类型的异常处理可供选择 /EHa(异步的)和/EHs(同步C++异常) 在以前 如果使用了/EHs 那么在一个catch(…)块中 也许可能 也许不可能捕捉到结构化异常 因为此行为是没有定义且不可靠的 现在 再使用/EHs时 就可保证不会捕捉到结构化异常 如果想与以前版本的Visual C++保持一致 并且捕捉异步结构化异常 还是应该在编译时使用/EHa    初始化顺序  以往 如果代码中同时有托管与本地全局变量及对象 那么初始化顺序是不确定的 如代码中存在托管对象与本地对象互操作 就不能保证哪一个对象先初始化了 现在 Visual Stuio 可保证所有的本地全局变量及对象先初始化 然后才初始化托管全局变量及对象    printf  就目前来说 printf中的%n格式化指示符一般用于指定输出的字符个数 这已经确认为一个安全隐患 并且已禁用 但可以使用set_printf_count_output来启用它 通过传递给set_printf_count_output一个零值( )可禁用它 而传递任意一个其他值可再次启用    swprintf函数  为与C++标准保持一致 对swprintf函数也作了修改 现在它已遵循C++标准了 在C++中 通过适当的参数 可实现重载 这个函数的老版本已不再建议使用 因为在C中 是不允许重载的 因此如果使用老格式 将会返回一个错误

cha138/Article/program/net/201311/11300

相关参考

知识大全 Visual C++ 2005中混合代码的初始化

VisualC++2005中混合代码的初始化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在V

知识大全 介绍Visual C++中的二十个常用方法

介绍VisualC++中的二十个常用方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一打开C

知识大全 我的Visual C++入门之路

我的VisualC++入门之路  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!N次失败次成功还学的不

知识大全 Visual C++中OpenGL编程入门

VisualC++中OpenGL编程入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Open

知识大全 Visual C++制作一个Sniffer实例

VisualC++制作一个Sniffer实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Snif

知识大全 Visual C++实现各种文字特殊效果

VisualC++实现各种文字特殊效果  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!.NET编程免

知识大全 Visual C++编译器常用选项设置

VisualC++编译器常用选项设置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Matlab

知识大全 理解 Visual C++ Extensions for ADO

理解VisualC++ExtensionsforADO  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 基于Visual C++的Winsock API研究

基于VisualC++的WinsockAPI研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!为了

知识大全 QQ尾巴病毒的Visual C++实现探讨

QQ尾巴病毒的VisualC++实现探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!