-
1 # 逗趣232
-
2 # 太科羅技
C++是C的親弟弟,而C#是則是他們二者的遠房親戚(其實更像是JAVA的表兄)。這三門語言都是十分優秀的程式語言,也都有很高的執行效率。三種程式語言的應用範圍很廣闊,下面我就來分別介紹一下三種語言的來歷以及應用領域(插圖為經典教材)。
C語言。C語言誕生在大名鼎鼎的美國貝爾實驗室,它的前身是B語言。C語言從誕生之初就獲得了廣大程式設計師的青睞,由於其簡潔的語法,高效的執行效率(比較接近彙編的效能),在很多領域獲得了廣泛應用。比如作業系統,影象處理演算法,硬體驅動,嵌入式裝置程式設計等等。
C++。儘管C語言已經足夠優秀,但它畢竟是一門面向過程的程式語言,不符合人的思維習慣(人腦的思維習慣有點像面向物件)。於是在這種背景下就誕生了更加強大的C++,之所以說C++是C語言的親弟弟,是因為C++同樣誕生在貝爾實驗室。C++在C的基礎上增加了資料封裝,繼承,多型等程式設計特性,同時又全部相容了C語言,使之成為C++的一個子集。C++語言背廣泛用在作業系統,大型應用軟體的開發中。
C#。C#是由微軟公司開發出來用來抗衡Java的一款現代程式語言(具有安全,穩定,簡單的特點)。它吸收了很多Java語言的優點(比如自動垃圾回收),但微軟公司為了避免法律糾紛,下意識的將其語法規則向C++看齊(也在一定程度上吸收了C++的諸多優點)。C#的語法簡單,可以快速上手,開發效率很高,被廣泛應用在了各類應用軟體,遊戲開發之中。
-
3 # 小小的船和彎彎的月兒
C++是帶類的C,基本語法都差不多,細節上C++語法會更嚴謹。C++是面向物件的語言,從開發角度來說比C會方便不少,也更容易維護。C#是完全面向物件語言,跟Java一樣的,更容易學習,邏輯相對前兩者更簡單明瞭。
-
4 # 星空147480491
c是祖先,c++繼承了c並增加了自己獨特的特性。c#跟前面的關係有,但是不太密切,相當於c的很遠很遠的孫子。java和c#一個輩份的,表兄弟關係。至於javascript 麼,可以理解為野種,是隔壁老王的兒子。
-
5 # 傳智播客
C/C++/C#的關係與區別?
1.先說C: C是最早的高階語言,歷史悠久,企業覆蓋廣,任何軟體幾乎都跑在C程式的上面,C更像程式語言的根。學習這門語言能夠理解程式設計的本質,使得今後的IT職業生涯之路越走越寬。
2.再說C++:C++是完全相容C的一門具備面向物件特點的語言,使得C的領域從系統級別,橫跨到應用級別,覆蓋領域更加廣泛。C++同時延續了C的全部優點(具備面向過程和麵向物件特點、程式設計本質掌握程度深)。
3.最後說C#:C#是微軟研發的基於C特點的一門類似於Java的程式語言。其中C#有很多C語言的影子。C#是一門專注於windows平臺開發應用程式的語言,而C/C++是相容windows和Linux平臺.
Windows應用
C#有.Net框架,C/C++有MFC、QT框架。
遊戲開發
C#有U3D遊戲框架, 而C++也有Cocos2D/3D遊戲框架。
目前市場上的C#能夠解決的方案,C/C++也能夠解決。而且C/C++知識寬度會涵蓋C#的知識。
我們來介紹一下每個層級:
硬體層級:就是實體硬體(包括、CPU、記憶體、顯示卡等)不屬於軟體範疇之內
彙編層級: 幾十年前是在沒有高階語言(C/C++/Java等)之前,是彙編的年代。組合語言對於人類可讀性非常差,不適合開發,現在由於有編譯器的存在(比如GCC[C語言編譯器]、JVM[java虛擬機器]等),可以把“高階語言”寫好的程式碼直接轉化成“組合語言”,所以市場組合語言的工程師需求量變的很少。而高階語言需求量增大。高階語言的好處在於對於人類的可讀性很好,在程式設計中可以用一些有含義的英文單詞表示語義。
系統層級:我們知道,我們平時用的所有的APP、或者電腦軟體都是跑在作業系統上的(Windows、Linux、Mac OS、Android、iOS等)。這些作業系統本身的程式碼都是C語言實現的,因為C語言是最早的高階語言,也是效能最優的語言,作業系統需要效能,多以都是選擇C語言實現。C語言佔據了整個系統層級,地位穩固,難以撼動!
應用層級:應用層級的程式,更加偏重軟體的程式的執行流程和功能。而開發起來的體量很大,這樣就需要具備面向物件的程式設計語法,因為面向物件是比較適合人類交流的程式設計方式。所以類似C++(基於C語言做了完善)、Java這類語言佔主要地位。 應用級別語言程式設計語義流暢,但是效能依然沒有C語言好。
指令碼層級:在這一層級的語言,更加看重程式設計語義,讓開發者的程式碼看上去很直觀,而且寫程式碼速度很快。但是有得必有失,增加了程式碼的可讀性(給人類看,計算機並不能看懂),編譯器把指令碼語言翻譯成組合語言(計算機能看懂、人類看不懂)的成本就越大,從而延長的翻譯的時間,而導致程式效能下降。
-
6 # 日衝資訊 黃
三種語言的發展過程回答中已經有很好的說明。這裡說說3種語言的現狀。C語言有時間響應準確的特點,至今仍被廣泛用於各種工業控制系統的底層驅動及控制軟體。C++改善了C語言語法結構過於簡單,不適合開發大型複雜系統的短板,引入了面向物件的思想,受益於對C語言製作的底層程式良好的相容性,C++被廣泛用於開發各種基礎的應用程式。C++受限於C語言的基本語法框架,無法取消指標操作,被很多倡導面向物件的人士詬病。這也使得C++的語法比較複雜,開發效率遠低於其他面向物件的程式語言。為了彌補這一短板微軟釋出了C#。C#語法結構接近Java等主流面向物件的語言。大幅提升了開發效率。同時,C#還保持了對C甚至是組合語言的相容性。技術上說幾近完美。但C#只能在Windows 家族的系統上執行,這個短板極大地制約了它的推廣和普及。
-
7 # 紅塵匆匆過客夢
c是鼻祖,是c++和c#的祖宗,通俗比方,c是祖父,c++是伯父,c#是侄兒,c雖有結構、函式、指標等程式設計思維,但沒有完整的物件概念,c++是對c的改進,採用全新的面向物件的程式設計思想,類包含資料、函式等,具有良好的封裝性,可以繼承派生,可以多型變化,對於軟體工程規模化開發起到了很好的促進作用,c#繼承了c++的程式設計思想,但又不同於c++,摒棄了c++的不實用不安全部分,加強優化了系統應用部分,c#依賴.net framework框架,配合採用龐大完善的框架類庫,即時編譯IL中間程式碼,兼顧功能和效能,方便各種需求應用開發,特別是當今網際網路web盛行,c#大行其道普及流行
-
8 # 不見君子云胡不喜
C就像手動擋的小鋼炮,老司機都喜歡,離合器配合油門,加速快還省油,一腳油門就能超車,就是需要經常要打開發動機蓋檢查是否漏機油,新手開起來還容易熄火。C#是自動擋的車,上班族的最愛,開起來特別容易,只要控制油門和剎車,省心省力,但是你上不了高速,有關部門還沒修好,並且不能去外市,因為是外地牌照不給上路。C++是定製級跑車,改裝人士的最愛,有人開它跑得過F1,有人開起來就像拖拉機。它配有全時四驅,四輪動力獨立分配,城市和越野模式隨意切換,加裝套件還能在水面上開,汽車上能有的功能全部都有,就是沒有行車電腦,所有功能都要自己控制開關。它有四套變速箱,分別控制每個車輪的動力分配,需要你用四個檔位杆來進行換擋,並且還有另外的十幾個按鍵來控制它的差速鎖和空氣懸掛,它也會漏機油,有時還會掉零件,新手不僅容易熄火,還會因為記不住哪個是點火開關而打不著火。
-
9 # 遷徙de麻雀
從歷史時間和語言特性來看,他們有設計參考(不是替代)關係。
下面是我畫的一個比較概要的關係圖
C到C++C語言設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器程式碼以及不需要任何執行環境支援便能執行的程式語言。
在系統級別,相比彙編,C能兼顧效能和開發效率。
而在應用層級別,尤其是面向物件思想流行以後,C++其實是作為C語言的增強版出現的。相比C,C++提供了更多程式設計友好性的特性並納入標準,比如虛擬函式、運算子過載、多繼承、標準模板庫、異常處理、執行時型別資訊、名字空間等。在應用層的設計開發效率和大型工程的設計組織上,C++就比較優勢了,同時也沒有丟棄C的效能優點。名字:C++這個名字出現是在1983年,客觀看C++並不是簡單的擴充套件C,它的名字叫++C更合適,但是有點難看,並且C+也已經被佔用了。
標準庫:從K&R C到C89、C99、C11,對比C++和C#,就知道什麼是簡潔舒服了。
GCC的選擇:GCC最先用C開發,從2008年開始移植到C++,理由是效能基本無差別,能設計出更好,更容易維護的程式。詳情可參見Linda Jacobson 2013年3月13日釋出的文章:“GCC"s move to C++”。這裡並不是討論C++和C誰好好,而僅僅是在C和C++之間做選擇時取捨點的一個例子。
C++到C#C和C++的核心開發難點是在記憶體的管理(自由是把雙刃劍)上;同時C++和C的可移植是建立在原始碼級別上或者提供額外的系統抽象層;不同系統間移植以及系統相關介面使用時,需瞭解標準庫的區別以及編譯、連結等構建過程的介入。
C#主要是降低C++和C帶來的開發難度,在一定程度上保持效能。用官方的話說就是:“簡單、現代、通用”。豐富的基礎類庫和應用程式模型、無微不至的IDE,微軟就這樣“誘拐”了大量的人上了這條大船。
這裡不能簡單比較C#和C++,還需要加上虛擬機器(CLR)一起來看。
C#(這裡換成.Net更合適)和Java一樣,在設計核心是提供自動記憶體管理和二進位制級別的可移植性。
1、自動記憶體管理:透過虛擬機器(CLR)來提供,即物件的記憶體分配和釋放由虛擬機器來完成,稱為垃圾回收器(GC)。主流的記憶體管理都拋棄了引用計數,CLR這裡和JVM一樣,也是使用標記清除及壓縮演算法;同時採用代齡機制利用區域性性原理提升回收效能。
2、二進位制級別的可移植性:實際上就是利用中間語言(IL)提供中間層來實現。中間語言同時還提供了基於不同語言(比如VB和C#)的二進位制級別共享機制。
如果從程序的角度看,其實要理解.Net程式執行機制就比C++和C難多了,這個也是C#程式設計師進階的最大難點。看下圖的使用者態堆疊在虛擬中的邏輯結構便可知一二。
上圖源自CoreCLR的wiki資料:Stackwalking in the CLR
關於OS的移植性,NetCore正式版本出來後才算是正式宣佈一個里程碑,Mono差不多可以退出舞臺了。.Net前期注重不同語言的二進位制級別共享和封閉式的全家桶,形成鮮明對比的是Java的標準加開源,現實告訴我們,.Net輸得很慘。
名字:在C上面帶上四個+,略顯浮誇。微軟主要想表示C#在一些語言特性方面對C++的提升的意思。
結束以上只是簡要概述C、C++、C#,他們各自有偏重的設計要點(同時影響了程式設計模式和設計實現)以及應用場景的差別。如果硬要在語言設計級別來分出個高下的話,一哥PHP沒來,這場辯論會就顯得很生硬。
回覆列表
在c的基礎上延伸出來的語言,其實大部分語言都借鑑了c或底層是c
c是低階語言沒有物件,所以有了物件的c叫c++,c#
java和javascript沒啥關係,只是在javascrip剛完成的時候作者覺得java火就取名為javascript