代码自动完成、文档自动生成、提高开发效率----介绍VcExtend[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 dellfox 的 blog

 
前    言

    vcextend 扩展了vc6.0的功能,包括函数体批生成、数据接口自动生成,注释可隐可现,注释自动生成文档等功能,可以大大提高vc的工作效率。

    vcextend使用vc60的扩展宏接口,采用vbscript编写,使用起来跟vc本身的命令几乎没有区别。vcextend完全公开源代码,可以无偿使用和修改。

    可以到http://www.mmmnn.com下载vcextend.

    下边介绍几个主要的命令:

    建立新类:生成干净清爽的类框架,代码模板可自由修改。

    代码整理:为函数声明生成函数体,为成员变量生成读写接口(包括声明和实现),将函数体按声明的顺序重排序。这些操作一次性完成,无论你是新设计一个类还是修改一个类,这个命令都会工作得很好。

    注释:生成注释模板,注释可隐藏,函数体可调出头文件写的函数注释进行阅读和修改。注释自动生成类似于msdn的文档。文档数据采用xml文件存储,你可以按照自己的喜好定义显示格式。

    注释批处理:显示/隐藏全部详细注释,显示/隐藏注释摘要,自动为数据接口函数生成注释,文档整理理。

 

 
一、预备----开始!

    当然,你要先下载vcextend.rar。另外,也需要安装微软的xml插件

    解包以后,可以看到txt和doc文件夹,txt是一些生成新类时使用的代码模板,doc文件夹存放由你的注释生成的文档和显示文档的工具。在你的工程中使用vcextend要把这两个目录拷到你的工程的根目录下,后面的讲解使用example目录下的demo工程,txt和doc文件夹已经在里边了。

    vcextend.dsm是vcextend的源代码,把它拷贝到c:\\program filesmicrosoft\\ visual studio \\ common\\ msdev98\\ macros目录下,并把里边提供的命令挂接到工具栏上,就可以使用了。

    如果你从没用过vc60的扩展宏,可以照下边的说明来操作。

    启动vc60,不要打开任何工程。

    在toos菜单选择macro,点击options >>, 点击load files,选中vcextend前面的复选框,取消其他选中的框。

    点击toolbars标签,新建一个工具条,命名为vcextend。

    点击commands标签,在category下拉列表中选中macros,commands框里就会显示vcextend的全部命令。

    选中classnew,拖到vcextend工具条上,在弹出的对话框中选中text only,你就会看到classnew命令已经挂到工具条上了。把其他命令也挂到工具条上。

    为了便于说明,我们先全部使用text only,以后,等你熟悉vcextend后,可以把文字按钮改为你喜欢的图标。

    在show menus for下拉列表中选择all editors,点击close关闭对话框。

    关闭vc60, 再重新打开。好啦,下面可以尝尝滋味如何了!

                                                       

 
二、看一看,试一试,味道怎么样?

    启动vc60, 打开example目录下的demo工程。

    这是appwidzard生成的sdi工程,全部使用缺省选项,只不过加了两个类罢了。

    让我们先来看一看。

    打开cshow类的头文件,是不是觉得代码特别的清爽干净?

    再用浏览器打开doc目录下的doc.htm文件。

    如果你没有安装微软xml插件,赶紧装一个。我用的是msxml3_cn。没有这个可能无法看到文档的效果。

    你可以看到cshow的文档了,虽然这是随便贴的一些文字,没有实际意义,但如果是真正的工程,这个文档就可以在编码、调试、维护的过程中发挥很大的作用,这些东西完全是由注释自动生成的。ctaste类的文档还是空的,等一下由你来完成。

    现在,我们再来试一试。请打开ctaste类的头文件,这是一个什么功能也没有的类。

    先试一下codecleanup功能。    

    随便写两个函数的声明,不要使用vc的add member function功能,而是直接在头文件上写。如:

    cstring createnewobj(cstring name, int age);

    在private:下面加个几成员变量,也是直接在头文件上写。每个变量要独占一行,并且,在要需要提供读写接口的变量后面加上可读写标记,可读的为//r,可写的为//w,可读写的为//rw,只能加在注释的最前面,如:

private:    
    cstring m_strname; //rw 对象的名字
    int     m_nage;    //r 对象年龄
    cstring m_straddr; //w

    写完了吧?现在,点一下codecleanup按钮。

    把光标放到你的函数的声明上,点击codejump按钮,怎么样?到了函数体了吧?再点一下codejump,又回到声明这边来了。

    再看看头文件的下方,注明r的函数生成了get函数,注明w的生成了set函数,把光标移到这些函数的上面,点击codejump,怎么样?函数体和实现都有了!

    再用codejump跳回头文件。我们只是走马观花一下,后面会有更详细的说明,现在先看看另一个主要功能:注释!

    把光标在一个函数的声明上,点击comment按钮,函数上方会出来一个注释模板。先不管这些注释项是否符合你的要求,如果需要,你可以修改的,以后再说。

    在各注释项上填一些内容,最好不要填垃圾文字,不想写的话,从别的地方拷一些也行,比如说就从这篇说明书上拷一些文字。

    再点击comment按钮,出问题啦,注释不见了!不会丢了吗?再点comment,还好,又回来了。

    用codejump跳到函数体。当你在写函数实现时想看一下注释怎么办?点一下comment,真棒,头文件写的注释,源文件也可以查看,当然,修改也是可以的。

    这是函数注释,类注释有没有?当然有了,还是这个comment,只不过要先把光标放到类声明或类声明上方。

    在类注释各项上填些文字,特别是简述和说明两项,多填一些,当然,内容可以是随便拷来的。

    无论是函数注释还是类注释,写完或修改后都要再点一下comment,并且,光标要放在注释或函数上,当注释隐藏了,才是保存了。

    现在我们来看看你写的文档。没写过文档?刚才填的注释就是了。

    用浏览器打开工程目录下的doc目录下的doc.htm,接下来,就随便逛吧,反正,文档很象msdn,格式是我们大家都很熟悉的。

    毛主席教导我们,要知道梨子的滋味,就得亲口尝一尝。味道怎么样?如果你喜欢,就继续往下看,如果不喜欢,如果不喜欢,那么......不会是真的吧?

 


三、丑话说在前头

    如果你浏览到了这里,说明对vcextend至少不反感。趁你高兴,我可要把一些问题先交代清楚。

    这是使用vc提供的宏功能和几个组件,用vbscript写的东东,语言的功能比较有限,并且,我对vbscript也不太熟,有些地方可能写得比较烂。

    最糟的是出错处理,比如我想打开一个文件,使用documents.open函数,这个函数没有返回值,如果文件不存在,它不会告诉我不存在,而是造成一个致命的内存错误,可能导致vc要整个退出。哪位知道有没有解决办法啊?

    当然,你不要害怕,这也没什么大不了的。如果你新建了一个工程,要使用vcextend功能,千万记住要把doc和txt两个文件夹拷到工程的目录下,和debug和res目录并列,如果你忘了的话,我以我的人格担保:一定会出问题的。

    如果修改了vcextend的源代码,最好把vc退出后再重新打开,要不然也可能产生与上边所说相似的内存错误。

    出了上述的问题后,如果在win2000环境下,最好注销再登录。

    还有一个问题是,由于语言所限,考虑到效率和性能,无法对代码进行复杂的词法分析,所以代码要比较规范,当然也不太特别,都是非常普通的编码规范,只要做到了下面几点就行:

    一是每个类一定要有构造函数,并且放在最上面,构造函数上方的代码将不作处理,你可以把内置的数据类型,如enum,struct或嵌套类什么的,放在构造函数的上边。

    二是每个成员变量的声明要独占一行,是指头文件的成员变量,函数体内的东西,vcextend是完全不管的。

    三是如果要写额外的注释,不能使用/**/,要使用//。

    存在的主要问题,大概就这些了吧。如果你发现了什么问题,请在论坛发表,我将尽力解决。

    另外要说明的是,inline函数的实现放在.inl文件中,所以一个类有三个文件。这是自动处理的,可不敢给你添麻烦。codejump的良好跳转功能,会让你感觉不到多了个文件。

    虽然还有一些问题,但我觉得vcextend还是挺好用的,能提高工作效率十分之n。我向你推荐它,就表示这个东东不错,因为,我觉得不好的东西,是从来不会给人的,比如说,我从来不会随便送钱给人家,因为,我知道,金钱是肮脏的东西。

 


四、与清爽干净的代码为伴----类框架生成

    如果你象我一样,喜欢清爽干净的代码,那么,用classnew来生成新类是一个不错的选择,尤其是生成cobject的子类。

    先用一下试试,点击classnew,在输入框中输一个类名:cmyclass,确定,感觉怎么样?

    classnew很简单易用,但还是有一些需要说明的。

    首先是一些可选项,请根据你的需要来填写,如继承自某一个类的,就加:basename,不指定则会认为以cobject为基类;要指定文件名,就加#filename,不能有后缀,因为.cpp和.h和.inl都会共用这个文件名,不指定则会以类名去掉前缀c作为文件名,我主张不指定为好;至于目录名,现在不理它吧,很少用,以后会提到的;最后就是宏选项了,如果是可序列化的类,就加/s,消息类就加/m,加了这些选项就会生成相应的宏。除了类名在最前面外,所有的选项都不需要考虑输入的顺序。

    你还可以修改代码模板,txt目录下的cpp.txt,hpp.txt,inl.txt就是生成新类框架的模板,可以按自已的喜好来修改。

    classnew有一个显著的缺陷,就是生成的类不会自动加入工程,也不会加入到classwizard中,要使用project->add to project->files功能手工把它加入工程,如果要加入到classwizard中,可以删掉工程的.clw文件,再重新编译。一个更简单的办法是,先用vc的new class功能生成一个类,再用classnew重新生成一遍,这样就不会有这些缺陷了。

    不是使用classnew生成的类,也完全可以使用vcextend的功能,只不过首次使用的时候会要求你输入类名和基类名而已,唯一的问题是代码跳转,偶尔可能会找不到,不过很少见。

    如果你用vc的appwizard新建了一个工程,想把vc生成的代码改为用classnew来生成,也很简单的。先把工程另存一份,并启动另一个vc打开另存的工程。用classnew重新生成各个类,并从另存的工程中把所缺少的代码拷过来。最好是先拷头文件的代码,拷完后点一下codecleanup生成函数体,再拷函数体的内容。每做完一个类后编译并运行工程看有没有问题,没问题再做下一个类。app类千万不要忘了拷cmyapp theapp这一行。

本文关键:代码生成,文档,注释
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top