淺談C、C++及其區別、兼容與不兼容

1、閒說C

C語言之因此命名爲C,是由於C語言源自Ken Thompson發明的B語言,而 B語言則源自BCPL語言。java

1967年,劍橋大學的Martin Richards對CPL語言進行了簡化,因而產生了BCPL(Basic Combined Programming Language)語言。而且他用B語言寫了第一個UNIX操做系統。python

1972年,美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母做爲這種語言的名字,這就是C語言。ios

C語言很是簡潔,只有32個關鍵字,9種控制語句,34種運算符。程序員

 

具體來講,C語言是一個結構化語言,重點在於數據結構和算法的實現。C程序的設計首要考慮的是如何經過一個過程,對輸入(或環境條件)進行運算處理獲得輸出(或實現過程(事物)控制)。算法

C語言能夠作任何用處,但最大的用處仍是寫寫操做系統和編譯器之類的。編程

C 語言是很是有效率的,不少時候你都須要考慮內存的管理等底層的東西。很惋惜這些都須要你去花不少的時間去作。做爲一種底層編程語言,能夠經過指針進行很直接的內存管理,另外,不少語言都是用 C 來設計的, 好比 perl , java, python。服務器

C語言是一種通用性的編程語言,它既具備高級語言的特色,又具備彙編語言的特色。,1978年後,C語言已前後被移植到大、中、小及微型機上,它能夠做爲工做系統設計語言,編寫系統應用程序,也能夠做爲應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用範圍普遍,具有很強的數據處理能力,不只僅是在軟件開發上,並且各種科研都須要用到C語言,適於編寫系統軟件,三維,二維圖形和動畫,具體應用好比單片機以及嵌入式系統開發。儘管C語言是爲實現操做系統軟件而設計的,但它也普遍的應用於開發便攜式應用軟件。數據結構

代碼:數據結構和算法

1 #include<stdio.h>
2 int main(void) 
3 {
4     printf("hello, world!n");
5     return 0;
6 }

 

 

2、閒說C++

20世紀70年代中期,Bjarne Stroustrup在劍橋大學計算機中心工做。他使用過Simula和ALGOL,接觸過C。他對Simula的類體系感覺頗深,對ALGOL的結構也頗有研究,深知運行效率的意義。既要編程簡單、正確可靠,又要運行高效、可移植,是Bjarne Stroustrup的初衷。以C爲背景,以Simula思想爲基礎,正好符合他的設想。1979年,Bjame Sgoustrup到了Bell實驗室,開始從事將C改良爲帶類的C(C with classes)的工做。1983年該語言被正式命名爲C++。編程語言

因而可知,C++是C的繼續和發展。C++功能強大,能夠因應開發大型應用軟件。便可以面向對象,也能夠兼容C,能夠面向過程。

C++是一種複雜、難以掌握的語言,不只體如今其語法,更體如今其提供了4種編程思惟模型上面,包括:procedural-based, object-based, object-oriented, generic paradigm。由此C++是既有效率,又有彈性;既能夠面向對象,又兼容面向過程。

C++這個詞在中國大陸的程序員圈子中一般被讀作「C加加」,而西方的程序員一般讀作「C plus plus」,「CPP」。 它是一種使用很是普遍的計算機編程語言。C++是一種靜態數據類型檢查的、支持多重編程範式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、泛型程序設計等多種程序設計風格。

C++是最流行的編程語言之一,它的應用領域涵蓋了系統軟件、應用軟件、驅動程序、嵌入式軟件、高性能的服務器與客戶端應用程序和諸如電視遊戲等娛樂軟件。

代碼:

1 #include<iostream>
2 using namespace std;
3 int main()
4 {
5     cout << "Hello, world" << endl;
6     return 0;
7 }

 

3、C和C++的聯繫與區別

面向過程的思路:分析解決問題所需的步驟,用函數把這些步驟依次實現。

面向對象的思路:把構成問題的事務分解爲各個對象,創建對象的目的,不是完成一個步驟,而是描述某個事務在解決整個問題步驟中的行爲。

從上述描述能夠看出,其實面向對象和麪向過程是兩種思考解決問題的方式,其差別主要在於思考的角度。

C語言是面向過程的編程,它最重要的特色是函數,經過main函數來調用各個子函數。程序運行的順序都是程序員事先決定好的。

C++是面向對象的編程,類是它的主要特色,在程序執行過程當中,先由主main函數進入,定義一些類,根據須要執行類的成員函數,過程的概念被淡化了(實際上過程仍是有的,就是主函數的哪些語句),以類驅動程序運行,類就是對象,因此咱們稱之爲面向對象程序設計。面向對象在分析和解決問題的時候,將涉及到的數據和數據的操做封裝在類中,經過類能夠建立對象,以事件或消息來驅動對象執行處理。

C語言和C++的最大區別在於它們解決問題的思想方法不同。C語言主要用於嵌入式領域,驅動開發等與硬件直接打交道的領域, C++能夠用於應用層開發,用戶界面開發等於操做系統打交道的領域。

C++既繼承了C強大的底層操做特性,又被賦予了教科書式的面向對象機制。它特性繁多,有其餘面嚮對象語言鮮見的多繼承,有回味無窮的對值傳遞與引用傳遞入木三分的區分以及const關鍵字,等等。C++就像是一把瑞士軍刀,或者像是一個工具箱,它爲你提供儘量多的工具,多到讓不熟悉它的人無所適從,讓懂得如何使用它的人如魚得水。C++的種種特性使得它很是適合用來編寫底層數據結構,算法,庫等,是系統軟件開發以及數學模型構建等的強大武器庫,被譽爲工業級編程語言。

C++對C的「加強」,表如今如下幾個方面:

類型檢查更爲嚴格。增長了面向對象的機制。增長了泛型編程的機制(Template)。增長了異常處理。增長了運算符重載。增長了標準模板庫(STL)。增長了命名空間,避免全局命名衝突。

4、C++與C不兼容之處

C的大部分代碼在C++上都能應用,而C++的代碼在C上不能應用。(記住是大部分,不是全部)

C++是C語言的超集,雖然C++兼容C,可是C++中也有與C語言中不兼容的地方。

4.1 變量聲明的位置

C中變量聲明和代碼是分開的,必須在函數開始處聲明;

C++中,變量能夠在任意處聲明,只要保證先聲名後使用的原則就能夠。

4.2 struct結構體方面

用struct定義變量

struct mystruct{ int i;float x;

在c中聲明struct變量要這麼寫:struct mystruct a;

在C++中前面不用加struct:mystruct a;

一種兼容的用法是:

typedef struct _mystructint i;float x;} mystruct;

而後用mystruct 定義變量。枚舉型(enum),聯合體類型(union)也是一樣。

在C++中,struct結構體支持成員函數的定義,C中不行。另外要注意的是,C++中成員函數的默認訪問說明符爲public,這一點和類不一樣,類的默認訪問說明符爲private.

4.3 bool類型值

C++中有bool(或boolean類型);C中可沒有這樣的bool類型,均爲數值類型!須要注意的是真爲非零(如:1,52,-5,-2等),假的數值爲0。

4.4 註釋的不一樣

C中的註釋至有一種 /*......*/;

C++中的註釋包含兩種/*......*/和//。

4.5 強制數據類型裝換

C中的強制轉化形式爲:(類型)變量;

C++中還可使用:類型(變量)的形式。

4.6 賦值

C語言中的賦值只有一中即:=;

C++中除了使用=外,還可使用()。例如:int x(5);就等於: int x=5;我想這種寫法是給C++中對象初始化時初始化屬性是對象時使用的,那麼對於基本類型也可使用了。

4.7 函數

C語言中函數沒有參數默認值,在C++中函數有參數默認值的概念,注意參數默認值與函數重載的區別。

C語言中函數的定義又兩種形式,經典形式和標準形式,C++中只支持標準形式。

標準形式:int string(int x,float y){......}

經典形式: int string(x,y)int x;float y;{......}

C++的函數必須先聲名原型或定義才能使用,由於C++是強數據類型語言,在C語言中,未聲名和定義函數以前調用函數是容許的.

4.8 運算符&和關鍵字const

&運算符最基本的含義是取地址,C和C++中都支持這一語法。但在C++中&還能夠表示引用。有了引用的概念後函數調用能夠做爲左值。例如:

int &rtux()......rtux()=5;

以上表達式在C++中徹底正確,但在C語言中是非法的。

const關鍵字要注意一點不一樣的就是在C++的類函數中,函數能夠聲名是能夠用const,表示這個函數沒有改變類中的任何屬性。如:void unchange()const;C不能有這樣的生明。

4.9 extern說明符

在C語言的某些版本中,能夠在程序中屢次使用一個全局變量而無需使用extern說明符。但在C++中除定義全局變量外,在其餘模塊使用應先用extern生明。

4.10 void指針

在C語言中void指針能夠賦給任何類型的指針,但在C++中,卻不行,但能夠先進行強制數據類型轉換,在賦值。

 

做者:耑新新,發佈於  博客園

轉載請註明出處,歡迎郵件交流:zhuanxinxin@foxmail.com

相關文章
相關標籤/搜索