WEB开发网
开发学院软件开发VC Visual C++ 2005中的突破性变化 阅读

Visual C++ 2005中的突破性变化

 2007-04-09 21:34:29 来源:WEB开发网   
核心提示: 最后,其中的某些变化,Visual C++ 2005中的突破性变化(2),是为了增强Visual C++编译器的可靠性,为达此目的,如果想继续使用老版本、非安全的函数,可在源代码开始处加上#define value of _CRT_SECURE_NO_DEPRECATE(此处value代表

最后,其中的某些变化,是为了增强Visual C++编译器的可靠性,为达此目的,微软公司此次保证了Visual C++中有明确定义并一致的行为。

当然,也要避免某些变化,此次Visual C++的大多数变化都是在代码安全层面上,如果这些变化向后影响到二进制代码的兼容性,那么就会尽量避免,因为源代码兼容性总是在二进制代码兼容性之前被发现的。另外,如果某些变化致使人们不想采用或升级到2005版,那么这种变化也要避免,因为这会导致软件项目的总成本增加。最后,编写代码方式的改变也要在成本上证明是值得的,否则,就没有必要去实现它了。

Visual C++库的十项突破性变化

Visual C++ 2005库已经发生了一系列的变化,可能会对现有的程序有所影响,在升级到Visual C++ 2005之前,必须要确定程序中没有这些问题。

1、参数的有效性

在C运行时库中,加入了一些代码,以检查参数的有效性。例如:如果传递的目标缓冲区大小不足以strcpy使用--通常这是在冒安全风险,而新版本此时则会调用一个非法参数处理程序。在release版中,会调用Dr.Watson;而在debug版中,会产生断言(assert),当然,只要程序中传递的参数都是有效的,就不会有什么问题了。

2、对非安全API的警告

在Visual C++ 2005中,CRT中的一组函数已不再建议使用,而应使用新提供的安全版本。大多数这些不建议使用的函数如果使用不当,将会导致缓冲区溢出或其他安全问题,这些函数如:strcpy、strcat等等。这些函数新的安全版本都在函数名后加了一个_s后缀,以方便识别,如strcpy_s、wcscpy_s、mbscpy_s、calloc_s和strcat_s这些函数。

如果想继续使用老版本、非安全的函数,可在源代码开始处加上#define value of _CRT_SECURE_NO_DEPRECATE(此处value代表某一数值);然而,还是建议大家升级代码使用新的安全函数。

上一页  1 2 3 4 5  下一页

Tags:Visual 突破性 变化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接