分享
 
 
 

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

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

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

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

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

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

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

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

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

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

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

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

我也常常看到“ MFC 永远不会过时”或者“ C++ 是不会灭亡的”这种发言。我理解发言人的心情,不过这种说法绝不客观。一种语言也好,一个 Application Framework 也罢,它们之所以有今天的地位,并不是纯粹自然形成的,有许多复杂因素的作用,也有时势造英雄的理由在内,所谓“居高声自远,非是籍秋风”是也。历史的舞台从来不是为某人专设,即使真有所谓万古长青的怪胎,恐怕也正应了那句老话:“众人都死了,只剩咱们两个老妖精,有什么意思!”我们现在使用的语言,不论 Basic , Pascal 还是 C++ ,甚至如日中天的 Java 和 C# ,终究都会有功成身退的一天。这并不是我们的损失,相反,薪尽火传,一种语言中好的,合理的因素,肯定会被后续者所继承和发扬,自然界的新陈代谢本该如此。

天空没有飞翔的痕迹,而飞鸟已经飞过。一种语言只要曾经在历史上留下浓墨重彩的一笔,完成它“为往圣继绝学,为万世开太平”的历史使命(有点夸张),这就够了,何必缠绵不舍作儿女之态!不知道我有生之年会不会看到 C++ 的消亡,如果真有这么一天,我会拍手欢呼,因为这说明已经有了另外一种更新更好的语言来代替它(或许是几种)。不过照我猜想,像 C++ 这种轰动武林惊万教的语言,其灭亡恐怕也不会是悄无声息,而多半属于“始皇既没,余威震于殊俗”那种情况。

最后请允许我发表一点感慨。语言的优劣其实是一个无需讨论的问题,个人的经历和所处环境在很大程度上就决定了你对某种语言的看法,这是很个人的东西。好比碰到一位法国朋友,他多半会自豪的告诉你:法语是世界上最好最优美的语言。对这种说法我会微笑表示赞同,并且欣赏他的民族自豪感,而不会觉得这是对汉语或者英语的贬低 — 虽然我心底里一直深信,汉语才是世界上最好的语言。当然,如果他对我说“你们那些破烂中文是些什么玩意”,那我可能就是另外一种反应了。

说了这么多,意思无非是想少些无谓的争论罢了。常在论坛上看到“ XXX 是最好的语言 ( 编译器 ) , XX 是什么东西”之类发言。我不想和他们争论,一个人对一样东西既然完全失去了接触和了解的兴趣,那么说什么大概都没有用了。只是觉得遗憾而已。人世间的隔膜与误会,大多是由于彼此不了解而引起,而多少悲剧正是由此而发生呵。在编程的世界里大概不会这么严重,不过言为心声,多少也可看出个人的品行。如果某个人 A 常在我面前说 B 的坏话,那么我对 B 不会有恶感,相反我对 A 的印象分要减去 20 。自己不了解的人或者事,不管,不说,也就是了。何至于恶言相加呢。

我参加工作的时间不长,各种各样的软件工程师倒是见过不少。就我看到的情况,程序员实在是很沉默寡言的一类人,平时总是表现的温文尔雅,有时候却难得的能见到他们大发脾气,扔鼠标,砸键盘,捶显示器,干什么的都有(这种情况多半是遇到没有办法除掉的 Bug 了)。面对亲人和朋友的时候他们有时候会选择长久的沉默,只有坐到机器前面时才会发现他们的痴迷和狂热。虽然普遍的不善言谈,但是他们似乎总能在游戏或者网络中找到发泄的方式。所以我在各种各样的论坛上看到语法错误不忍卒读的文字,看到互相指责乃至于人身攻击的情况,甚至看到许多不雅的词汇,虽然心情无论如何愉快不起来,但是我想我能理解。只是,我仍然感到担心,毕竟程序员这一行干几年就了不起了,而人生还有很长的路要走呢。没有一个健全的心态,没有足够为人处世的技巧, 30 岁以后的人生该如何把握呢

作者Blog: http://blog.csdn.net/weizhisheng

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有