程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C到C++語言進化史

C到C++語言進化史

編輯:C++入門知識

C++語言的順利推廣顯然要很感謝C語言已有的龐大用戶群,但是在C++的語言風格中也深深的烙上了C語言的印記,這就是許多人為什麼喜歡使用C++語言的理由吧。

程序代碼也有風格,這算不得什麼新鮮事。早在20世紀80年代, C語言程序員就必須在K&R風格和ANSI風格之間擇善而從。但平心而論。我確實沒有見過哪一種語言能像C++這樣,在代碼風格方面表現得如此詭谲和難以捉摸:誰也說不清C++代碼究竟能衍生出多少種迥異的風格。

但我知道,有許多C++初學者在面對不同風格的C++代碼時,經常會誤以為自己看到的是好幾種完全不同的編程語言——僅此一點就足以提醒我們,研究和廓清C++語言風格的演化和發展規律已是當務之急了。

和文體學家們研究歷朝歷代文體變遷的工作相仿,研究C++語言風格的流變史也沒有什麼捷徑可走。我們只能依據劉勰在《文心雕龍》中提倡的“原始以表末”[1]的研究方法,循著歷史的脈絡,推求代碼風格的來源,探尋風格演化的內因,並借以闡明技術發展的趨勢和規律。

1. 帶類的C——對C語言風格的因襲   

在1983年12月Bjarne Stroustrup采納Rick Mascitti的建議,將其發明的新語言命名為“C++”之前,人們一直用“帶類的CC with Classes)”來稱呼這種脫胎於C語言的,帶有數據抽象機制的“方言”。雖然帶類的C在本質上僅僅是一種可以被預處理程序Cpre轉換為傳統C語言代碼這類似於我們在Oracle中見到的Pro*C語言的預處理過程)的擴展性語言,但它的確在風格上奠定了後來所有C++代碼的基礎。

  1. class stack {  
  2.   char s[SIZE];  
  3.   char* min;  
  4.   char* top;  
  5.   char* max;  
  6.   void new();  
  7. public:  
  8.   void push(char);  
  9.   char pop();  
  10. }; 

這段“帶類的C”代碼錄自Stroustrup所著的《C++語言的設計和演化》。代碼中的new()其實是類stack的構造函數,這與後來的C++語言有很大的不同。顯而易見,帶類的C在風格上幾乎完整地承襲了C語言的衣缽。代碼中的聲明語句看上去與C語言一模一樣,class的結構也與C語言中struct的結構大致相仿。

這些跡象反映出C++語言來源於C又盡量與C保持兼容的設計思想——這種設計思想既為C++的迅速普及提供了便利C++語言的順利推廣顯然得益於C語言已有的龐大用戶群)。

也在C++語言風格中深深地烙上了C語言的印記,以至於在若干年後,當C++語言已經基本具備了“獨立人格”的時候,Stroustrup還不得不時常提醒人們要盡量拋開C語言的思維方式。

另一方面,Stroustrup從Simula語言借用的類、派生、訪問控制等面向對象概念在帶類的C中牢牢地扎下了根。據Stroustrup介紹,他為C語言引入面向對象機制的本意在於尋找一種“合適的工具”[2],以便實現分布式系統或解決類似的復雜問題。但無論怎樣,Stroustrup將C的高效和Simula的優雅捆綁在一起的做法都在事實上為C++語言埋下了“雙重性格”的種子——很難說這不是C++語言風格多樣化的直接誘因。

  1. 簡介學習C++總結之談
  2. 對C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法

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