Visulal C++是什么?--兼谈其他

出处:www.examlink.com 作者:feige 日期:2007年01月23日 16时07分

  这个问题很奇怪吗?大概是。不过,当我又看到有人发表诸如“Windows/Office是VC编写的”或者“VC是无所不能的”这种高论,我就禁不住这样问自己。

  VisualC++究竟是什么?你平常在其中工作的那个标记着“MicrosoftVisualC++”的窗口,真的就代表VisualC++吗?

  按照我的理解,VisualC++是一个开发工具包,它大概可以分成三个主要的部分:

  1.DeveloperStudio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“MicrosoftVisualC++”,所以很多人理所当然的认为,那就是VisualC++了。其实不然,虽然DeveloperStudio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,DeveloperStudio并不是专门用于VC的,它也同样用于VB,VJ,VID等VisualStudio家族的其他同胞兄弟。所以不要把DeveloperStudio当成VisualC++,它充其量只是VisualC++的一个壳子而已。这一点请切记!

  2.MFC。从理论上来讲,MFC也不是专用于VisualC++,BorlandC++,C++Builder和SymantecC++同样可以处理MFC。同时,用VisualC++编写代码也并不意味着一定要用MFC,只要愿意,用VisualC++来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,VisualC++本来就是为MFC打造的,VisualC++中的许多特征和语言扩展也是为MFC而设计的,所以用VisualC++而不用MFC就等于抛弃了VisualC++中很大的一部分功能。但是,VisualC++也不等于MFC。

  3.PlatformSDK。这才是VisualC++和整个VisualStudio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,PlatformSDK是以MicrosoftC/C++编译器为核心(不是VisualC++,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到DeveloperStudio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成VisualStudio的基石。

  为什么我会觉得“Windows是用VC开发的”这种说法很奇怪?因为它太含糊了。用VC,可以编写MFC应用,也可以编写纯SDK程序,不论哪一种方式,都不一定是非VC不可。只要乐意,我完全可以用UltraEdit来写出一个MFC程序,再用CL编译之,没有必要一定动用VC这个大家伙。而且有许多黑客和买不起VisualStudio的人就是这么干的!用SDK编程就更不需要VC了,Down一个BorlanC++Compiler下来,或者用lcc之类的编译器,同样可以达到目的。再说了,Windows可不是一个单纯的产品。用VC来编写Windows外围程序是完全不成问题的,可是操作系统的核心部分呢?就算可以用VC来编写代码,调试怎么办?VC自身的调试器对一般的应用功能是够强大的,可是对于系统级的调试根本无能为力,因为这个调试器本身就是依赖于操作系统的。只有系统级的调试程序如debug,SoftIce和Wdebug这些工具才能完成如此重大的任务。

  从历史上来看,VisualC++1。0的出现晚于Windows3。0,而且那时候的MFC只有一个雏形而已,用来开发操作系统根本是不可能的事情。在VisualC++1。0的前面倒是有一个MicrosoftC/C++7。0,但是它整体水平不如BorlandC++3。1,在扩展内存管理方面的功能又不如WatcomC++,所以一直没有占据很大的市场。它现在已经不作为单独的产品,但仍然作为PlatformSDK的主要组成部分而存在于VisualStudio产品中,而且其功能比过去也不可同日而语了。到Windows95问世的时候,MFC仍然在尽力追赶操作系统的功能。应该说VisualC++5。0是一个转折点,一方面MFC已经发展比较完善,另一方面,操作系统的基本结构也已经稳定,后面就主要着眼于系统整合与完善作为商务平台的功能。已经稳定的系统不可能再进行翻天覆地的修改,所以,我比较能够接受“Windows系统是用MicrosoftC++和MASM作为编译器完成的”这种说法。研究Windows的系统文件可以看出,很多文件显示出来的LinkerVersion明显是MicrosoftC++编译器。至于代码是用什么编写的?我不知道,也不想知道,除了DeveloperStudio的编辑器之外,任何好的文本编辑器都能够做到这一点。

  VisualC++是无所不能的吗?唔,最好也是分开来说。DeveloperStudio肯定不是—它只是个外壳而已。MFC呢?也不是。一方面它是对API的封装,离开了API它就什么也干不了;另一方面,MFC对API的封装也不够全面,有些时候还是要直接调用API函数才能够“为所欲为”。至于PlatformSDK,倒真的可以说它几乎是无所不能的。不过,过分强调这一点并没有太大意义。只要有一套完整的编译器,和必须的支持文件,其他开发工具也可以说是“无所不能”的,比如BorlandC++Compiler或者lcc都可。

  老实说,我并不喜欢“无所不能”这类字眼。关键在于各人的理解不同。如果我较起真来,说能不能写个VC程序让电脑拿起鼠标砸向我不喜欢的老板,你说它能办得到吗?所谓的“无所不能”究竟有何意义?让我用VC写一个Server,能在普通工作站上支持每秒几千万的访问量,杀了我也办不到,不管VC的优化手段是多么有效。在具体的平台上,在特定的操作系统中,不论多么强大的工具,最终还是要受到平台和系统本身的限制。大家应该知道这个悖论吧:上帝能否制造出一块他自己也举不起来的石头?

最后更新时间:2008-05-28 11:40:41
文章评论
共有 0 位网友发表了评论
用户名: 新注册) 密码: 匿名评论 [查看所有评论]

评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
您可以用以下几种方式找到此文章

考试全流程