在Visual Studio 2005中使用 C++编程
【IT168技术文档】
越来越多的人开始使用Visual Studio 2005,因此现在是一个好的时机来叙述我使用这个新的编译器的经验。是什么让我有这个强烈的愿望了?嘿嘿,我就是这么一个迫不及待的人!我想现在还为时不晚!
对于Visual Studio 2005,你首先发现的一个事情就是它有一个版本管理器,这个管理器通过检查你的项目来决定运行哪个版本的编译器。你可以在Visual Studio .NET 2003 这个版本上升级到Visual Studio 2005;Visual Studio .NET 2003和Visual Studio 2005能同时运行在您的电脑上,至于说用哪一个更好,取决于你是否想让你的项目在Visual Studio 2005下运行。当您打开一个Visual Studio .NET 2003下的项目时并且想修改时,Visual Studio 2005 推荐你保存一个副本,并随后生成一个XML 报告来记录所修改的内容。
一些细微的代码变化
为了揭开Visual Studio 2005 的面纱,我把过去栏目中的六个项目进行编译。这些项目都需要进行较小的修改,这些小变化都是为了让Visual Studio 2005 成为一个流行的C++编译器。许多新的规则在C++标准中是认可的,但是在Visual Studio 2005中是不允许的。Visual Studio 2005里两个最常见的语言变化是循环语句的作用范围和缺省定义int 类型。循环里面的定义的局部变量在循环外面是没有作用的。以前,这样写是可以的:
for (int i=0; i<max; i++) {
// do something}
if (i>0) {
// do something else}
在这个程序片断中,变量i不仅在 for 语句里面起作用,而且在 if 语句里也起作用。严格的说,C++是不允许这么用的,所以现在你不需要重新编写这段代码,如:
int i; // move outside for loop
for (i=0; i<max; i++) {
// do something }
if (i>0) {
// do something else }
无论是静态局部变量,还是静态全局变量,如果没有声明的话,会默认为int 类型。以前,你可以这么写:
const BUFLEN=255;
此时编译器会默认变量BUFLEN为int 类型。现在,这种默认为int 的方式被禁止了。你必须声明你变量的类型,如:
const int BUFLEN=255;
这种方式适用于静态变量,全局变量,数据集,和函数返回的类型。如果你没有声明是int ,你将获得错误信息:“error C4430: missing type specifier - int assumed. Note: C++ does not support default-int”
另外一些变化是关于C/ C++的安全库。这些安全库为旧的C语言运行库函数提供更多安全版本,比如说你知道和喜欢的,如:strcpy, fopen and others 。我准备在以后的栏目中写更多的关于C++安全的文章。如果你等不及了,你可以阅读马蒂.洛菲尔(Martyn Lovell)的文章《Safe! Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries》,这篇文章在05年的第5期。
网址是:(msdn.microsoft.com/msdnmag/issues/05/05/SafeCandC).
谈了很多的C++,那么Visual C++的类库(MFC)又发生了怎样的变化了?正如我前面所讲,Visual Studio 2005 没有对Visual C++的类库进行大的改变,这是一件好事。这意味着类库没有变化。然而,我注意到CWnd::OnNcHitTest的返回类型值由UINT 变成了LRESULT。这使用起来可能又存在较小的别扭,但是它不会破坏你对Visual C++的类库(MFC)的使用。