程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> Visual C++與Delphi/C++Builder之比較(一)

Visual C++與Delphi/C++Builder之比較(一)

編輯:vc教程

  經常看見有朋友在論壇發帖子問Visual C++和C++Builder這兩個重量級開發工具孰優孰劣(更多的是問Visual C++與Delphi孰優孰劣)。本文就試圖從技術水平、易用性、穩定性、發展前景等對它們進行比較分析。

  由於Delphi與C++Builder同為Inprise公司產品,共享集成開發界面(IDE),而且使用同一套VCL框架(這一點最關鍵),它們帶的調試器、PVCS/TeamSource團隊開發支持、數據庫引擎及企業版中集成的其它高級功能等都是相同的,所以本文將其與C++Builder歸入“同一陣線”。我在網上見到一些Delphi程序員認為C++Builder與VC比較接近,這是個誤解。事實上,Delphi和C++Builder除了使用的語言不同,其余幾乎都相同。為了避免話題轉移到C++語言與Object Pascal語言(即Delphi所用的語言)的比較,下文主要對比分析Visual C++與C++Builder。

  首先,從它們的應用程序框架(Application Frame,有時也稱為對象框架)進行比較。Visual C++采用的框架是MFC。MFC不僅僅是人們通常理解的一個類庫。(同樣,Delphi和C++Builder使用的VCL的概念也不僅僅是一個控件庫。)你如果選擇了MFC,也就選擇了一種程序結構,一種編程風格。MFC早在Windows 3.x的時代就出現了,那時的Visual C++還是16位的。經過這些年的不斷補充和完善,MFC已經十分成熟。但由於原型出現得比較早,MFC相比於VCL落後了一個時代。盡管微軟對MFC的更新沒有停止,我也經常讀到持“只要Windows不過時,MFC就不會過時”之類觀點的文章,但就象Inprise(原Borland)的OWL框架的淡出一樣,MFC的淡出也是早晚的事。如果MFC青春永駐,微軟的開發人員也不會“私自”開發出基於ATL的WTL呀。當然,WTL的地位不能和MFC比,它並不是微軟官方支持的框架,封裝的功能也相當有限。但至少也反襯出了MFC存在的不足。

  我以為,最能體現一個應用程序框架的先進性的是它的委托模型,即對Windows消息的封裝機制。(對Windows API的封裝就不用說了吧。大同小異,也沒什麼技術含量。如果高興,你也可以自己寫一個類庫來封裝。但對Windows消息驅動機制的封裝就不是那麼容易的了。)最自然的封裝方式是采用虛成員函數。如果要響應某個消息就重載相應的虛函數。但出乎我的意料,MFC采用的是“古老”的宏定義方法。用宏定義方法的好處是省去了虛函數VTable的系統開銷。(由於Windows的消息種類很多,開銷不算太小。)不過帶來的缺點就是映射不太直觀。好在較新版本VC帶的ClassWizard可以自動生成消息映射代碼,使用起來還是比較方便的。但和VCL的委托模型相比,MFC的映射方法就顯得太落後了。而C++Builder對C++語言進行了擴展,以便引入組件、事件處理、屬性等新特性。由於功夫做在編譯器級,生成的源代碼就顯得十分簡潔。但是由於擴展的非標准特性,使用VCL的C++Builder的源代碼無法被其它編譯器編譯。而MFC的功夫做在源代碼級,雖然消息映射代碼較為復雜且不直觀,但兼容性非常好。只要你有MFC庫的源代碼(隨VC企業版的光盤提供),你的MFC程序理論上用任何符合ANSI標准的編譯器均可編譯通過。C++Builder 3以上版本可以原封不動直接編譯Visual C++程序,很多人認為這是C++Builder的兼容性好,實際上很大程度應歸功於MFC的兼容性好。微軟辛辛苦苦用標准方法寫MFC,卻為對手制造了方便。不知他們作何感想?而因為C++Builder對語言作了擴展,VC不能編譯C++Builder的程序。看來在這方面VC要輸給C++Builder了。而且VCL所支持的組件、屬性等都是MFC所缺乏的特性。雖然VC也能支持組件,但要通過AppWizard先生成一個“包裹”類(wrapper),不如VCL來得簡潔。有很多人使用C++Builder就是沖著控件板上那一大堆組件來的,VC雖然能使用的組件也很多(也許不比C++Builder少),但由於不方便而對RAD程序員沒有吸引力。

  C++Builder的VCL比Visual C++的MFC先進的另一個特性是異常處理。但令人啼笑皆非的是,它的異常處理代碼有bug,有時會無端拋出異常。不知道在最新的版本中有沒有改正了。而VC的框架MFC也不是一無是處。經歷了那麼多年的發展和完善,MFC功能非常全面,而且十分穩定,bug很少。其中你可能遇到的bug更少。而且有第三方的專門工具幫助你避開這些bug。如此規模的一個類庫,能做到這一點不容易。不要小看了這一點,很多專業程序員就是為這個選擇VC的。而C++Builder的VCL的bug就相對較多了,而且有些它自己帶的示例程序都有錯誤。看來Inprise還有很長的路要走。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved