前言 作為理工科的我們,看到一些理論、概念和一些術(shù)語(yǔ),就是腦瓜疼。在大學(xué)時(shí),這些知識(shí),很多時(shí)候都是作為填空題,最終的答案就跟四級(jí)作文差不多,答案腦洞大開(kāi)?;貧w正題,其實(shí),有很多東西我們只需要了解一下就好了,知道有這么一回事。例如,C語(yǔ)言是誰(shuí)搞出來(lái)的,C語(yǔ)言又是怎么編譯?后者便是經(jīng)常問(wèn)到的問(wèn)題。 這篇文章主要是C語(yǔ)言入門(mén)中的了解篇,簡(jiǎn)單了解一下C語(yǔ)言的發(fā)展史和特點(diǎn),還有C語(yǔ)言編譯的過(guò)程。 C語(yǔ)言的發(fā)展史 所謂“吃水不忘挖井人”,我們學(xué)習(xí)C語(yǔ)言,那就需要知道C語(yǔ)言之父是哪位大佬了。那么他是來(lái)自美國(guó)的丹尼斯.里奇(DennisRitchie),生于1941年,在1972年發(fā)明了C語(yǔ)言,2011年10月12日永遠(yuǎn)離開(kāi)了我們。他可謂是程序員祖師爺,來(lái)自于貝爾實(shí)驗(yàn)室,1983年獲得圖靈獎(jiǎng),除了C語(yǔ)言,我們熟知的Unix系統(tǒng)也是他設(shè)計(jì)開(kāi)發(fā)的。下圖就是丹尼斯里奇的照片。 C語(yǔ)言并不是只給一個(gè)人使用的,使用者就包括開(kāi)發(fā)者、維護(hù)者、管理者和實(shí)現(xiàn)者,這么多人一起用,假如你一套他一套,沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),這時(shí)候就亂成一團(tuán)了,你寫(xiě)的東西他看不懂,他寫(xiě)的東西你也看不懂。所以,C語(yǔ)言就必須有標(biāo)準(zhǔn),推動(dòng)其發(fā)展。這些標(biāo)準(zhǔn)就可以看似C語(yǔ)言的發(fā)展史了。 1.“K&R”標(biāo)準(zhǔn) 1978年,丹尼斯.里奇和布萊恩.科爾尼汗聯(lián)合出版了《C程序設(shè)計(jì)語(yǔ)言》(TheC ProgrammingLanguage)的著作,這本書(shū)被C語(yǔ)言開(kāi)發(fā)者稱(chēng)為“K&R”,很多年來(lái)被當(dāng)作C語(yǔ)言的非正式的標(biāo)準(zhǔn)說(shuō)明,人們稱(chēng)這個(gè)版本的C語(yǔ)言為“K&RC”。 1988年丹尼斯里奇和布萊恩科爾尼汗修改此書(shū),出版了《C程序設(shè)計(jì)語(yǔ)言》第二版,第二版就涵蓋了ANSIC語(yǔ)言標(biāo)準(zhǔn),這個(gè)版本也成為了大學(xué)C語(yǔ)言的經(jīng)典教材。書(shū)本如下圖: 鏈接: (附件有該書(shū)的pdf版本) 2. “C89”標(biāo)準(zhǔn) C語(yǔ)言在1972年11月問(wèn)世,1978年由美國(guó)電話電報(bào)公司(AT&T)貝爾實(shí)驗(yàn)室正式發(fā)布。1970到80年代,C語(yǔ)言被廣泛應(yīng)用,從大型主機(jī)到小型微機(jī),也衍生了C語(yǔ)言很多不同的版本。為了統(tǒng)一C語(yǔ)言版本,1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)局(AmericanNational StandardsInstitute,ANSI)開(kāi)始制定C語(yǔ)言標(biāo)準(zhǔn),于1989年12月完成,在1990年春發(fā)布,這個(gè)標(biāo)準(zhǔn)稱(chēng)為“ANSIC”標(biāo)準(zhǔn),也叫“C89”標(biāo)準(zhǔn)。 3.“C90”標(biāo)準(zhǔn) 后來(lái)ANSI把“C89”標(biāo)準(zhǔn)提交到ISO(國(guó)際化標(biāo)準(zhǔn)組織),1990年被ISO采納為國(guó)際標(biāo)準(zhǔn),稱(chēng)為“ISOC”標(biāo)準(zhǔn)。又因?yàn)檫@個(gè)版本是1990年發(fā)布的,因此也被稱(chēng)為“C90”標(biāo)準(zhǔn)。ANSIC(C89)和ISOC(C90)內(nèi)容基本相同,主要區(qū)別在于格式組織不一樣而已。 4.“C99”標(biāo)準(zhǔn) 在“C89”標(biāo)準(zhǔn)確立后,C語(yǔ)言的規(guī)范在很長(zhǎng)一段時(shí)間內(nèi)都沒(méi)有大的變動(dòng)。直到1995年,C程序設(shè)計(jì)語(yǔ)言工作組對(duì)C語(yǔ)言進(jìn)行了一些修改,稱(chēng)為后來(lái)在1999年發(fā)布的ISO/IEC9899:1999標(biāo)準(zhǔn),通常被稱(chēng)為“C99”標(biāo)準(zhǔn)。 5.“C11”標(biāo)準(zhǔn) 2007年,C語(yǔ)言標(biāo)準(zhǔn)委員會(huì)又重新開(kāi)始修訂C語(yǔ)言,在2011年正式發(fā)布了ISO/IEC9899:2011標(biāo)準(zhǔn),簡(jiǎn)稱(chēng)為“C11”標(biāo)準(zhǔn)。 以下為C語(yǔ)言發(fā)展圖。 這么多標(biāo)準(zhǔn),到底是用哪個(gè)呢?“K&R”是非正式標(biāo)準(zhǔn),而且年代久遠(yuǎn),現(xiàn)在基本上是不使用;“C89”和“C90”屬于同一個(gè)標(biāo)準(zhǔn),內(nèi)容一樣,只是認(rèn)證的機(jī)構(gòu)不一樣而已,這個(gè)標(biāo)準(zhǔn)也一直用到現(xiàn)在。目前的主流應(yīng)該是“C99”標(biāo)準(zhǔn),GCC編譯器對(duì)“C99”標(biāo)準(zhǔn)的支持相當(dāng)于較好。那GCC是啥呢?GCC(GNUCompiler Collection, GNU編譯器集合)是一套由GNU工程開(kāi)發(fā)的支持多種編程語(yǔ)言的編譯器。 C語(yǔ)言被人稱(chēng)為結(jié)構(gòu)化語(yǔ)言,那么C語(yǔ)言程序設(shè)計(jì)就是結(jié)構(gòu)化程序設(shè)計(jì),主要觀點(diǎn)就是采用自頂向下,逐步細(xì)分和模塊化的程序設(shè)計(jì)方法,使用順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)來(lái)構(gòu)造程序。 C語(yǔ)言從誕生到現(xiàn)在,已經(jīng)經(jīng)歷了半個(gè)多世紀(jì),依然受到開(kāi)發(fā)者的青睞,并稱(chēng)為廣大工程師的入門(mén)首選語(yǔ)言,并且在TIOBE編程語(yǔ)言榜上都是前三位置(很多時(shí)候都是老大位置)。下圖就是TIOBE最新編程語(yǔ)言排行榜,也可以通過(guò)下面的網(wǎng)址進(jìn)行查看 C語(yǔ)言的優(yōu)點(diǎn) 在這里概括為三個(gè):簡(jiǎn)潔、靈活、高效。 1.簡(jiǎn)潔性: C語(yǔ)言一共只有32個(gè)關(guān)鍵字和3種基本控制結(jié)構(gòu),可通過(guò)簡(jiǎn)短的代碼實(shí)現(xiàn)模塊,并對(duì)模塊加以整合,從而構(gòu)建出一個(gè)龐大而復(fù)雜的程序。32個(gè)關(guān)鍵字如下圖所示,而3種基本控制結(jié)構(gòu)即前面提到的順序、選擇、循環(huán)。 2.靈活性 C語(yǔ)言程序編寫(xiě)形式比較自由,語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。C語(yǔ)言能通過(guò)簡(jiǎn)單的整數(shù)類(lèi)型、實(shí)數(shù)類(lèi)型和字符類(lèi)型,靈活構(gòu)造出更加復(fù)雜的數(shù)組、指針、結(jié)構(gòu)體、聯(lián)合體等復(fù)合數(shù)據(jù)類(lèi)型,并以此實(shí)現(xiàn)鏈表、隊(duì)列、棧、樹(shù)、圖等各種數(shù)據(jù)結(jié)構(gòu)。特別是C語(yǔ)言的精華“指針”,通過(guò)指針可以直接尋址到相對(duì)應(yīng)的內(nèi)存單元,即可對(duì)內(nèi)存的數(shù)據(jù)進(jìn)行訪問(wèn)、修改等操作,從而編寫(xiě)出非常靈動(dòng)、神奇的C語(yǔ)言程序。 3.高效性 程序設(shè)計(jì)語(yǔ)言可分為機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言,機(jī)器語(yǔ)言是使用0和1二進(jìn)制碼編寫(xiě)的語(yǔ)言,由于計(jì)算機(jī)能直接識(shí)別,所以說(shuō)用機(jī)器語(yǔ)言編寫(xiě)的程序效率很高,但是對(duì)于我們來(lái)說(shuō)可讀性很差,所以后來(lái)就產(chǎn)生了匯編代碼,提高了程序的可讀性。 用C語(yǔ)言編譯生產(chǎn)的目標(biāo)代碼執(zhí)行的效率僅比匯編語(yǔ)言低一些,但是比其他高級(jí)語(yǔ)言(C 、java、C#)編寫(xiě)出的程序要高。 我們天天使用的操作系統(tǒng)、數(shù)據(jù)庫(kù)、游戲引擎等大多都是使用C語(yǔ)言進(jìn)行實(shí)現(xiàn)的,還有很多經(jīng)典算法、框架也是使用C語(yǔ)言進(jìn)行編寫(xiě)的。學(xué)好C語(yǔ)言也是為了嵌入式開(kāi)發(fā)打好基礎(chǔ)。 |
|
來(lái)自: 漫步之心情 > 《C網(wǎng)絡(luò)通信安全》