{eval=Array;=+count(Array);}
c語(yǔ)言是不是世界上最好的編程語(yǔ)言?答案肯定是否定的。
c語(yǔ)言真的永遠(yuǎn)不會(huì)過時(shí)嗎?答案當(dāng)然也是否定的。
任何東西,沒有最好之說,只有最適合之說。
一、c語(yǔ)言的最大優(yōu)勢(shì)是效率。提起效率,其實(shí)效率最高的語(yǔ)言是匯編語(yǔ)言,但是匯編語(yǔ)言是機(jī)器語(yǔ)言,不符合人類的使用習(xí)慣。所以綜合編程效率和運(yùn)行效率來看,c語(yǔ)言就是首選了。
然而,是不是在任何情況下,我們都對(duì)執(zhí)行效率這么苛刻呢?
當(dāng)然不是了。
在嵌入式系統(tǒng)里,比如像智能手表、針孔攝像頭等,由于體積、能耗和硬件資源的限制,我們對(duì)代碼的運(yùn)行效率比較苛刻(這樣才能能節(jié)省內(nèi)存和cpu,從而節(jié)省成本)。所以我們使用c語(yǔ)言,就是最合適的。
二、但是在pc系統(tǒng)或者服務(wù)器系統(tǒng)里,尤其是隨著硬件價(jià)格成本的不斷降低(請(qǐng)參考摩爾定律),我們對(duì)代碼的運(yùn)行效率不那么苛刻了。反而隨著軟件復(fù)雜度的提升,我們對(duì)代碼的編程效率和代碼的集成度有了更高的需求,而這些卻都不是c語(yǔ)言的強(qiáng)項(xiàng),這個(gè)時(shí)候面向?qū)ο笳Z(yǔ)言,比如java會(huì)更加合適。
所以,綜合編程語(yǔ)言的發(fā)展歷史,從來沒有也不會(huì)有一款編程語(yǔ)言永遠(yuǎn)都不會(huì)過時(shí)。因?yàn)樯鐣?huì)在發(fā)展,有些制約因素在以前是制約因素,現(xiàn)在可能就不是了,那么所謂合適的主體也就變了。c語(yǔ)言在過去的幾十年里一直興盛不衰,但是并不意味著以后不會(huì)消亡。我們看到隨著嵌入式設(shè)備的和web化趨勢(shì)的結(jié)合,golang語(yǔ)言開始嶄露頭角,在一些領(lǐng)域慢慢替代c語(yǔ)言了。相信在未來,開發(fā)語(yǔ)言會(huì)不斷的進(jìn)行進(jìn)化,進(jìn)化出符合當(dāng)前需求的新的開發(fā)語(yǔ)言。
是不是最好的語(yǔ)言?俗話說,文無第一,所以也不存在最好的語(yǔ)言,只有最合適某些領(lǐng)域的語(yǔ)言。
永遠(yuǎn)不會(huì)過時(shí)?計(jì)算機(jī)出現(xiàn)才幾十年,現(xiàn)在任何的語(yǔ)言、設(shè)計(jì),都遠(yuǎn)遠(yuǎn)談不上永遠(yuǎn)。一定會(huì)有過時(shí)的一天。
但是,我們可以說,C語(yǔ)言是最經(jīng)典的流行語(yǔ)言。從1970年代發(fā)展到現(xiàn)在,足夠經(jīng)典,也足夠優(yōu)秀。因?yàn)椋?br/>
C語(yǔ)言方便、高效的完成了對(duì)計(jì)算機(jī)體系結(jié)構(gòu)的抽象。而從1970年代到現(xiàn)在,計(jì)算機(jī)底層的體系結(jié)構(gòu)并無巨大變化
C語(yǔ)言與UNIX系統(tǒng)構(gòu)成了良好的共生關(guān)系。而UNIX及類UNIX系統(tǒng)到現(xiàn)在仍統(tǒng)治整個(gè)計(jì)算機(jī)界(Linux, macOS, Android, iOS等等,連Windows都號(hào)稱POSIX兼容)
C語(yǔ)言是互聯(lián)網(wǎng)TCP/IP編程的原生語(yǔ)言,很多基礎(chǔ)協(xié)議內(nèi)容如socket,都是基于C實(shí)現(xiàn),也適合C實(shí)現(xiàn)。而TCP/IP正統(tǒng)治整個(gè)網(wǎng)絡(luò)
C語(yǔ)言編譯器容易實(shí)現(xiàn),對(duì)一個(gè)新CPU,可以迅速實(shí)現(xiàn)對(duì)應(yīng)的C編譯器,移植成本低?,F(xiàn)在大量的MCU都實(shí)現(xiàn)且僅實(shí)現(xiàn)了C編譯器
小結(jié)一下:
C語(yǔ)言雖然談不上最好,也談不上永不過時(shí),但在與硬件系統(tǒng)接近的領(lǐng)域,如操作系統(tǒng)、驅(qū)動(dòng)程序、MCU編程等領(lǐng)域,C語(yǔ)言是最適合的,并且在硬件底層未發(fā)生巨大變化的情況下,仍會(huì)具備強(qiáng)大的生命力,是一個(gè)值得花時(shí)間學(xué)習(xí)的語(yǔ)言。
首先,C語(yǔ)言是世界上最好的編程語(yǔ)言,它是其他的編程語(yǔ)言需要膜拜的編程語(yǔ)言,它是編程語(yǔ)言世界“神一樣”的存在,永遠(yuǎn)不可能過時(shí),因?yàn)樗侵敢鯇W(xué)者學(xué)習(xí)編程語(yǔ)言的“燈塔”。
其后任何的編程語(yǔ)言,都有C語(yǔ)言的身影。它們出現(xiàn),由于時(shí)間的推移和應(yīng)用的特殊需要,C語(yǔ)言搭建的家園必須擴(kuò)建,但是它們的基石離不開C語(yǔ)言,至少擺脫不了C語(yǔ)言的影子。
C語(yǔ)言是最接近底層(匯編語(yǔ)言)的編程語(yǔ)言,它編譯后的效率極高。
C和C++語(yǔ)言都有指針,特別是函數(shù)指針,而其他高級(jí)語(yǔ)言極力反對(duì)的就是指針的存在。
有些編程語(yǔ)言的崛起就是以指針為攻擊對(duì)象而吸引眼球的。
在嵌入式領(lǐng)域,中斷向量實(shí)際就是函數(shù)指針。
C語(yǔ)言的函數(shù)指針和結(jié)構(gòu)及聯(lián)合,構(gòu)成了完美的“COM接口技術(shù)”,故在嵌入式領(lǐng)域,C/C++編程語(yǔ)言是其他任何編程語(yǔ)言無法取代的。
菜農(nóng)認(rèn)為,沒有指針的編程語(yǔ)言,就別在嵌入式領(lǐng)域混了!
如圖所示,菜農(nóng)在2003年在PIC上用宏匯編實(shí)現(xiàn)的“HPL語(yǔ)言”(早已完美地應(yīng)用到產(chǎn)品上),它也跑不出C語(yǔ)言的影子!
菜農(nóng)從1981年就開始用匯編語(yǔ)言,BASIC,TC,BC,DBASE,F(xiàn)OXBASE,VB,VC++,F(xiàn)OXPRO,BC++,DELPHI,CVI,mysql,JAVA,C#,html,css,js,VB腳本到如今的PHP,也在2006年學(xué)過python,也看過QT……總之菜農(nóng)用過、學(xué)過和看過幾乎所有流行的編程語(yǔ)言。
不請(qǐng)自來,作為一名長(zhǎng)期使用C語(yǔ)言進(jìn)行開發(fā)的老司機(jī),來回答一下這個(gè)問題。
答主本人從2000年開始接觸使用C語(yǔ)言,那還是486計(jì)算機(jī)還是天價(jià)的時(shí)代,上一次計(jì)算機(jī)課和過年一樣興奮。迄今已經(jīng)近20年的時(shí)間,很多其它語(yǔ)言有的衰落了,有的起來了,有的是起起落落。
像pascal、basic、fortran等等,現(xiàn)在有的學(xué)生可能連聽說過都沒有,現(xiàn)在幾乎已經(jīng)消失了,像C/C++/java/python/php/javascript等等都是經(jīng)過大浪淘沙的勝利者,尤其是C語(yǔ)言,生命力是最頑強(qiáng)的。因?yàn)閹缀跛械挠?jì)算機(jī)系統(tǒng)底層都是用C語(yǔ)言開發(fā),尤其是linux/unix以及其衍生系統(tǒng)都是以C語(yǔ)言為主的操作系統(tǒng),windows系統(tǒng)也是如此,只不過微軟花了大價(jià)錢開發(fā)了VC,但是還是以C語(yǔ)言為基礎(chǔ)的封裝的。
后來的嵌入式操作系統(tǒng)更是離不開C語(yǔ)言,所有嵌入式的BSP都是以C語(yǔ)言編程的,固件庫(kù)也是用C語(yǔ)言封裝的。包括已經(jīng)一統(tǒng)手機(jī)天下的android操作系統(tǒng),所有的driver層還必須是C語(yǔ)言開發(fā),因?yàn)閍ndroid的底層就是linux,android不過是在linux上開發(fā)優(yōu)化了java虛擬機(jī),然后用java語(yǔ)言開發(fā)了UI庫(kù)。其實(shí)嚴(yán)格來說android并不是新的操作系統(tǒng),而是一個(gè)適用于手機(jī)的UI庫(kù)。
正如一個(gè)城市建筑群,所有建筑的地基都是用C語(yǔ)言打下的,你能把地基丟掉嗎,顯然是不行的,C語(yǔ)言青春永駐也是自然而然的事情。
答案是:不會(huì),上面已經(jīng)說了,C語(yǔ)言是可以直接和硬件驅(qū)動(dòng)語(yǔ)言,是所有操作系統(tǒng)的基礎(chǔ)。除此之外,C語(yǔ)言的效率是除匯編語(yǔ)言之外效率最高的語(yǔ)言,即使目前計(jì)算機(jī)的算力已經(jīng)非常廉價(jià)的今天,在某些要求苛刻的關(guān)鍵計(jì)算任務(wù)上,首先仍然是C語(yǔ)言,甚至有時(shí)使用C語(yǔ)言有時(shí)并不是完全因?yàn)樾?,而是因?yàn)榭煽?。高?jí)語(yǔ)言由于封裝了操作系統(tǒng)的某些特性,比如線程安全、內(nèi)存管理等等。這些高級(jí)特性再某些時(shí)候運(yùn)行結(jié)果可能是未知的,比如有可能內(nèi)存分配失敗,線程得不到及時(shí)調(diào)度等。對(duì)于實(shí)時(shí)性要求比較高的場(chǎng)景,這些不可預(yù)知的問題都是致命的。而C語(yǔ)言的簡(jiǎn)單直接,就顯得格外重要了。
即使不斷誕生新的語(yǔ)言,有一部分任務(wù)采用其他語(yǔ)言完成,但是和底層硬件打交道仍然離不開C語(yǔ)言,如果你打算在driver層面或者從事嵌入式開發(fā)謀一份工作,那就毫不猶豫的擁抱C語(yǔ)言吧,如果你是高手,高薪工作那都不是事兒。
如果您有什么不同意見,歡迎留言討論。
C與言是不是最好的編程語(yǔ)言這個(gè)不好說,但是在可預(yù)見的未來是不會(huì)過時(shí)的。
這世上有很多優(yōu)秀的編程語(yǔ)言,C語(yǔ)言,C++語(yǔ)言,Java,C sharp等,每種語(yǔ)言都有自己的特點(diǎn)和使用場(chǎng)景,也都有自己的缺點(diǎn)和無法彌補(bǔ)的遺憾。要說哪種編程語(yǔ)言是世界最好的編程語(yǔ)言這個(gè)問題是沒有意義的。
C語(yǔ)言不一定是最好的編程語(yǔ)言,但它是一個(gè)不可被替代的編程語(yǔ)言,它的許多精髓仍然被其他的編程語(yǔ)言借鑒著!學(xué)好C語(yǔ)言吧!
問一種語(yǔ)言是不是世界上最好的編程語(yǔ)言,實(shí)際上這種問法是不恰當(dāng)?shù)?。C語(yǔ)言也好,Basic語(yǔ)言也好,或者是Python語(yǔ)言也好,不存在好與不好之說,只能說哪個(gè)更適合你,哪種編程語(yǔ)言更擅長(zhǎng)哪種領(lǐng)域而已。
如對(duì)于C語(yǔ)言,應(yīng)該說是一種比較重要的、比較基礎(chǔ)的編程語(yǔ)言。如果你以后的工作方向更側(cè)重于硬件方面(如單片機(jī)開發(fā))、操作系統(tǒng)底層通信開發(fā)、復(fù)雜信號(hào)處理算法等等方面,那學(xué)習(xí)C語(yǔ)言是確實(shí)比較合適的。C語(yǔ)言是一種編譯型語(yǔ)言,運(yùn)行效率比較高,在這些領(lǐng)域更合適些。
但C語(yǔ)言的的缺點(diǎn)也比較明顯,相對(duì)于Python等動(dòng)態(tài)類型的編程語(yǔ)言來講,它入門相對(duì)較大,自己在學(xué)習(xí)過程中必須要有足夠的耐心、恒心,多多練習(xí)、多多調(diào)試才能積累更多的編程經(jīng)驗(yàn),得心應(yīng)手的解決實(shí)際的工程問題。
在C語(yǔ)言是否會(huì)過時(shí)方面,應(yīng)該也不存在過時(shí)之說,各種編程語(yǔ)言的編程思想方法(如程序結(jié)構(gòu)都有順序、循環(huán)、選擇等結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)的組織)等思路方面都是相通的。學(xué)好C語(yǔ)言,對(duì)于你將來學(xué)習(xí)第二種編程語(yǔ)言肯定是有好處的,能夠幫助你更快的學(xué)習(xí)理解其它的編程語(yǔ)言思想,會(huì)有極大的促進(jìn)作用。
直接從數(shù)據(jù)來看,TIOBE公布了5月編程語(yǔ)言的排行榜,C語(yǔ)言時(shí)隔5年重回第一。
首先,C語(yǔ)言是編程語(yǔ)言世界中“神一樣”的存在?,F(xiàn)如今市面上大多數(shù)編程語(yǔ)言都或多或少的包含C語(yǔ)言的身影。C語(yǔ)言是最接近底層的編程語(yǔ)言,編譯后的效率極高。C語(yǔ)言有指針,特別是函數(shù)指針,中斷向量實(shí)際就是函數(shù)指針。
C語(yǔ)言的函數(shù)指針和結(jié)構(gòu)及聯(lián)合,構(gòu)成了完美的“COM接口技術(shù)”,在嵌入式領(lǐng)域,C/C++是其他任何編程語(yǔ)言無法替代的。如果語(yǔ)言沒有指針,那在嵌入式領(lǐng)域是非常難生存的。
如果你要懂得C語(yǔ)言,那必須要懂得程序設(shè)計(jì)的思想,想真正學(xué)會(huì)程序的設(shè)計(jì)必須與數(shù)據(jù)結(jié)構(gòu)打交道。如果初學(xué)者從Java或者VB入手,基本上很難理解如何構(gòu)造數(shù)組、鏈表、樹、圖等結(jié)構(gòu),這些東西比較容易和封裝、繼承等概念沖突,反觀C語(yǔ)言則可以清楚明白的表示。只有真正理解數(shù)據(jù)結(jié)構(gòu),才可以體驗(yàn)程序設(shè)計(jì)的思想和算法精髓。
所有包含微處理器的設(shè)備都支持C語(yǔ)言,從微芯片到手機(jī)都可以通過C語(yǔ)言推動(dòng)。C語(yǔ)言是一個(gè)比較少見的應(yīng)用領(lǐng)域極為廣泛的語(yǔ)言。所有的系統(tǒng)平臺(tái)都支持C語(yǔ)言,所有的應(yīng)用程序也都可以由C語(yǔ)言來開發(fā)。
1.C語(yǔ)言可以讓你更好的了解計(jì)算機(jī)。
2.設(shè)備驅(qū)動(dòng)程序和操作系統(tǒng)只能用C語(yǔ)言編寫。
3.微控制器程序的編寫。
4.相較于其他編程語(yǔ)言,在實(shí)現(xiàn)相同功能的前提下,C語(yǔ)言所需要的代碼更少,運(yùn)行效率更快。有時(shí)候,你程序所需要的速度,只有C語(yǔ)言可以完成。
5.幾乎所有高級(jí)編程語(yǔ)言都是以C語(yǔ)言為基礎(chǔ),所以學(xué)習(xí)過C語(yǔ)言,在學(xué)習(xí)其他編程語(yǔ)言時(shí)會(huì)簡(jiǎn)單很多。
6.C語(yǔ)言的存在時(shí)間很長(zhǎng),使用團(tuán)體非常廣泛并且有大量的現(xiàn)成代碼可以利用。這就使你能在過去程序的基礎(chǔ)上,快速進(jìn)行更新。
7.C語(yǔ)言是開源組織的語(yǔ)言。Linux就是用C語(yǔ)言編寫的,Linux的功能有多強(qiáng)大,這個(gè)我不多贅述。
8.C語(yǔ)言是唯一一個(gè)闡述指針本質(zhì)的語(yǔ)言,C#和Java跳過了指針,但是不可否認(rèn)的是,指針卻是讓C語(yǔ)言更加強(qiáng)大。
如果你是計(jì)算機(jī)專業(yè)的學(xué)生,幾乎各大高校入門的第一種語(yǔ)言就是C語(yǔ)言。當(dāng)然也會(huì)有以C++或者Java入門的。正經(jīng)的說,沒有一門語(yǔ)言可以被稱為最好的編程語(yǔ)言,之所以會(huì)有這么一說,多半都來自程序員間的囧談。IT行業(yè),你適合的,對(duì)你來說就是最好的。
其次,C語(yǔ)言會(huì)不會(huì)過時(shí),這個(gè)不會(huì)的。主要從兩個(gè)方面聊聊:
第一:為什么更多的搞笑采用C語(yǔ)言作為入門語(yǔ)言?并不是說C語(yǔ)言簡(jiǎn)單(現(xiàn)在大部分程序員沒有多少敢說精通C語(yǔ)言的),而是C語(yǔ)言可以更快的帶你進(jìn)入編程世界,了解編程的常規(guī)思維方法。C語(yǔ)言是一門面向過程語(yǔ)言,相對(duì)面向?qū)ο蠖?,很多邏輯可以看得更清晰,不至于?duì)于初學(xué)者而言太過于抽象。從C語(yǔ)言學(xué)到的概念理論,也都可以很快的套用到其他編程語(yǔ)言。比如判斷、循環(huán)、函數(shù)、數(shù)據(jù)結(jié)構(gòu)等等。
第二:大家都知道C語(yǔ)言是一門底層語(yǔ)言,略高于匯編語(yǔ)言之上,低于Java/Python等高級(jí)語(yǔ)言。C語(yǔ)言的存在就是更方便的銜接硬件和軟件。比如電腦開機(jī),從按下電源按鈕到屏幕顯示開機(jī)Logo,這個(gè)階段運(yùn)行的絕大部分程序都是C語(yǔ)言(早些時(shí)候更多的是匯編)。換言之,C語(yǔ)言服務(wù)的行業(yè)更多的是制造業(yè),制造業(yè)雖然說不如互聯(lián)網(wǎng)那樣讓人眼花繚亂,但是也不可或缺。沒有制造業(yè),何談互聯(lián)網(wǎng)。
如果你想入門編程,還是先想好自己的方向。C語(yǔ)言多掌握一些,甚至你會(huì)覺得很多問題你都會(huì)有更深的理解。比如變量存儲(chǔ)、對(duì)象生存期等等。
c語(yǔ)言永遠(yuǎn)不會(huì)過時(shí),為什么呢?要從我們解決問題的思維方式和方法上來看。人類的思維方式和方法基本原理都一樣,都是通過抽象,分類,然后按照一定的步驟去執(zhí)行。實(shí)際這就是計(jì)算機(jī)里對(duì)程序的定義。而c語(yǔ)言基本覆蓋了這些,并且簡(jiǎn)潔,優(yōu)美。它是我們解決問題的基本語(yǔ)言,什么都可以做。
而大家看到的很多高級(jí)語(yǔ)言,實(shí)際上他們更注重的是應(yīng)用,讓開發(fā)人員能更快,更方便的去開發(fā)應(yīng)用。大家知道,應(yīng)用是在不斷變化的,也是在不斷的被淘汰,而基本原理是不會(huì)變的,學(xué)會(huì)c語(yǔ)言,可以做到以不變應(yīng)萬變。
第一、在沒有界定范圍的時(shí)候,沒有人能夠說什么是最好。每一種語(yǔ)言出現(xiàn)都有它出現(xiàn)的應(yīng)用場(chǎng)景,在那個(gè)時(shí)代,那個(gè)場(chǎng)景下,那個(gè)語(yǔ)言才能說最好。如果你需要一個(gè)效率極高的語(yǔ)言,那肯定就是C語(yǔ)言或者匯編。如果你要搞嵌入式開發(fā),那肯定也是C語(yǔ)言,java和C#沒法在嵌入式系統(tǒng)上運(yùn)行,所以他們?cè)谶@方面不存在好不好。
第二、在現(xiàn)在看來,C語(yǔ)言是永遠(yuǎn)不會(huì)過時(shí)的語(yǔ)言。起碼在馮諾依曼機(jī)的時(shí)代是這樣的,我們也沒有跡象能看出馮諾依曼機(jī)要被淘汰。
10
回答10
回答10
回答1
回答10
回答9
回答8
回答10
回答9
回答10
回答