Visual C++ 2005 IDE 的增强特性 (1)
原文:Nick Wienholt
饶趣译
原文出处:http://www.codeguru.com/columns/Kate/article.php/c9167/
尽管对于C++语言的改变及IDE的改进还没有引起人们大量的注意,尽管还缺乏一定的公开性,IDE的改进已经非常明显,它们将极大地改进开发人员在日常工作中所积累的经验。这些改进巨大而显著――从对Server Explorer的增强到宏的智能支持,从类视图结构的UML到对新的MSBuild编译系统的支持,以及所有类似的变动。本文及后来新增的内容将覆盖所有这些激动人心的特性的方方面面。
一、 IntelliSence的改进
当 IntelliSen于90年代中期在Visual C++中被描述时,它执行相当缓慢而且没有为C++编码中所潜在的复杂操作提供足够的帮助。与C++相比,传统的Visual Basic代简直出奇的简单,在VB中可以直接使用IntelliSence(当你在编写代码时,它总是能够为你提供有用的信息和帮助)。而另一方面,C++语言的如下特性使得让IntellSence正常工作成为一个困难:
名字空间 模板 宏及其它预处理方法 头文件 头文件与源文件的代码分离 使得后台编辑变得非常困难的复杂编辑过程
所有这些问题都解释了为何Visual C++ IDE组需要大量的版本来使IntellSence达到无依赖的独立状态。在Visual C++的2005发布版中,这个小组已经很接近这个目标了。其中一个主要的改进在于代码在编辑后被解析,IntellSence能够对类中有效的方法和变量给出正确的信息。但这也仅仅是一个最有成就的尝试,非常复杂的代码语句仍然会使IntellSence变得无所适从。
如前面所介绍的, IntelliSence被增强并能够支持宏定义。虽然并非是一个意义深远的改进,但它却虽然方便实用,特别对于那些有大量参数列表的宏而言。图1展示了IntelliSence为使用一个古老的MAX宏提供了一些帮助。
图1.IntelliSence对宏的支持
除了对宏的支持以外,与模板的搭配也工作得更加良好,以前由于混乱而使得IntelliSence的作用大打折扣的成员列表也因采用约束出现在头文件中的信息而得到修正。
二、XML注解
对于有C#经验(或熟悉VB.NET 2005)的开发人员来说,XML注解对于C++是一个受欢迎的扩展。XML注解与原有的工程或.NET工程搭配,可以生成能够被Visual Studio .NET或类似NDoc这样的第三方工具使用的XML文档。
下表展示了推荐用于XML文档的标签:
<c>
表示一行代码,例如一个方法或类名
<code>
与 <c> 类似,但是表示多行代码
<example>
表明注释是一个展示如何使用一个方法或类的例子;典型地包含<c>或<code>子元素
<exception>*
指明一个方法能够抛出的异常
<include>*
允许注释来源于另外的文件,需要指定一个文件名及XPath表达式
<list> 与 <listheader>
用于定义表格
<para>
表示一个段落
<param>*
用于命名或描述一个被方法所接受的参数
<paramref>*
指示一个术语为方法所接受的一个参数
<permission>*
指示调用方法所需的条件
<remarks>
提供比<summary>元素更深层的信息
<returns>
描述方法的返回值
<see>*
指定一个链接
<seealso>*
添加一个包含使用另外一个标签附加信息的链接
<summary>
用于为一个类或方法提供主文档
<value>
描述一个属性或属性的访问方法
带*号的标签为编译器可选的标签。
XML注解添加于相应代码元素的上方,并由三个一组的斜杠标识"///"。下面的代码示例展示了一个由summary标签注解的简单的类,它还包含一个由value标签注解的属性。
///<summary>Demonstrates the use of XML comments in C++</summary>
ref class CommentedClass {
public:
/// <value>C++/CLI with an automatically-generated backing member
/// variable</value>
property int Prop;
}; 要打开XML文档内容,可以通过Configuration Properties | C/ C++ | Output File页将Generate XML Documentation File 属性设置为Yes来打开,或都为命令行编译器指定/doc选项。(参见图2)
图2. 产生一个XML文档文件
打开/doc选项,工程中的每一个*.CPP都将会生成一个*.XDC文件。这个文件包含了文件中每一个类的XML注解。前面示例代码中相应的XDC文件内容为:
<?xml version="1.0"?>
<doc>
<members>
<member name="T:CommentedClass" decl="false"
source="z:\nick\dotnet articles\vc++ 2005
ide\xmlcomments\xmlcomments\xmlcomments.cpp" line="14">
<summary>Demonstrates the use of XML comments in C++</summary>
</member>
<member name="P:CommentedClass.Prop" decl="false"
source="z:\nick\dotnet articles\vc++ 2005
ide\xmlcomments\xmlcomments\xmlcomments.cpp" line="17">
<value>A C++/CLI with an automatically-generated backing
member variable</value>
</member>
</members>
</doc>
在编辑过程结束时,这些XDC文件将被合并到一起,并生成一个包含所有XDC文件内容的XML文件。默认的工程模板所产生的XML文件名称也所生成的执行文件或汇编文件同名。使用这种文件命名转换允许Visual Stuio通过使用XML文件注释来增强IntelliSense,如图3所示:
图3. XML 文档注释与IntelliSense同时使用
三、调用浏览器 没有IDE的辅助,要明了某一个具体的方法被谁调用及调用了哪些方法是一个很枯燥的工作。虽然Visual C++ IDE的前一版本中提供了部分功能,但使用起来却很困难且并不总是有效。在Visual C++ 2005中的调用浏览器允许双向浏览调用图表,它还允许在源码文件的帮助下上朔方法在哪里被调用和实现。 图4展示了我前一篇文章中所使用的ThreadPool程序的调用图表。调用浏览器树对于一个简单的应用程序及真实应用程序来说有一定的复杂度,这个树很宏大。能够被收缩、展开及展示一个具体的调用分支,它有着不可置信的作用,可以通过使用Find In Files对话框作为导航机制。
图4. 调用浏览器
调用浏览器拥有基于用户指定搜索标准的过滤能力。用户可以指定函数名称进行搜索,可以使用*或?搜索通配符。
后面,我将继续讲述IDE的改进,包括允许直接在IDE中使用类UML建模的新的类视图工具。