成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

我們?yōu)槭裁匆獙W(xué)習(xí)和使用 C 語(yǔ)言?學(xué)習(xí)C語(yǔ)言的原因

一、前言對(duì)于理工 科學(xué)生來(lái)說(shuō),這個(gè)答案可能很簡(jiǎn)單,因?yàn)檫@是一門(mén)必修課。而對(duì)于程序員來(lái)說(shuō)選擇一門(mén)編程語(yǔ)言,在某種程度上,對(duì)職業(yè)生涯的發(fā)展會(huì)產(chǎn)生重大的影響,所以必須慎 之又慎。那么,為什么要選擇一門(mén)誕生了

一、前言

對(duì)于理工 科學(xué)生來(lái)說(shuō),這個(gè)答案可能很簡(jiǎn)單,因?yàn)檫@是一門(mén)必修課。而對(duì)于程序員來(lái)說(shuō)選擇一門(mén)編程語(yǔ)言,在某種程度上,對(duì)職業(yè)生涯的發(fā)展會(huì)產(chǎn)生重大的影響,所以必須慎 之又慎。那么,為什么要選擇一門(mén)誕生了將近半個(gè)世紀(jì)的語(yǔ)言?本文不是老生常談的廢話,如:”C 語(yǔ)言是編程的基礎(chǔ)”、”學(xué)好 C 語(yǔ)言,走遍天下都不怕”等等,本文力爭(zhēng)詳盡而又有理的回答這個(gè)問(wèn)題,旨在成為最好的為什么要學(xué)習(xí)和使用 C 的文章。

二、C 語(yǔ)言

C 語(yǔ)言是由美國(guó) AT&T 貝爾實(shí)驗(yàn)室的研究員 Dennis Ritchie 在 B 語(yǔ)言的基礎(chǔ)上,最初作為改造 Unix 操作系統(tǒng)的開(kāi)發(fā)語(yǔ)言,并伴隨著 Unix 操作系統(tǒng)興起而流行,后來(lái),隨著微型計(jì)算機(jī)的發(fā)展,C 開(kāi)始被移植到其他操作系統(tǒng)平臺(tái)上,成為獨(dú)立的程序設(shè)計(jì)語(yǔ)言。

下圖摘自 TIOBE 編程語(yǔ)言排行榜,過(guò)去 30 年 90% 時(shí)間里 C 都是獨(dú)領(lǐng)風(fēng)騷的,僅偶爾被 Java 超越:

技術(shù)分享

那么是因?yàn)橐婚T(mén)語(yǔ)言一直位于排行榜的第一名就該去學(xué)習(xí)和使用嗎?顯然不是,人云亦云是程序員的大忌。為操作系統(tǒng)而生的標(biāo)簽注定了 C 不可能平庸,實(shí)話實(shí)說(shuō),C 是一門(mén)很難學(xué)習(xí)和使用的編程語(yǔ)言,沒(méi)有編譯原理、操作系統(tǒng)和計(jì)算機(jī)體系結(jié)構(gòu)扎實(shí)的基礎(chǔ)知識(shí),根本不可能把 C 學(xué)的明白、用的順手。C 作為一門(mén)工程實(shí)用性極強(qiáng)的語(yǔ)言,提供了對(duì)操作系統(tǒng)和內(nèi)存的精準(zhǔn)控制,高性能的運(yùn)行時(shí)環(huán)境,源碼級(jí)的跨平臺(tái)編譯等優(yōu)點(diǎn),才是我們必須學(xué)習(xí)和使用 C 的理由。

同時(shí),幸運(yùn)的是 C 也是個(gè)有趣的東西,對(duì)編程的認(rèn)知越深,就會(huì)越覺(jué)得有意思,我簡(jiǎn)單列舉一些 C 的優(yōu)點(diǎn):

2.1)結(jié)構(gòu)化設(shè)計(jì)語(yǔ)言,語(yǔ)法清晰、結(jié)構(gòu)簡(jiǎn)單,模塊化使得程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立,便于開(kāi)發(fā)、調(diào)試以及調(diào)試。

2.2)運(yùn)算符多,把括號(hào)、賦值、強(qiáng)制類(lèi)型轉(zhuǎn)換等都作為運(yùn)算符處理,靈活使用各種運(yùn)算符可以實(shí)現(xiàn)在其它高級(jí)語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。

2.3)數(shù)據(jù)結(jié)構(gòu)豐富,能實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)類(lèi)型的運(yùn)算,引入指針、結(jié)構(gòu)體概念使程序效率更高。

2.4)為操作系統(tǒng)而生,可以像匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,允許直接訪問(wèn)物理地址對(duì)硬件進(jìn)行操作,把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái)。

2.5)程序執(zhí)行效率高,一般比匯編程序生成的目標(biāo)代碼效率低 10%~20%。

2.6)可移植性好,C 語(yǔ)言抽象了針對(duì) CPU 編程的細(xì)節(jié),能廣泛應(yīng)用于針對(duì)大型操作系統(tǒng)和系統(tǒng)軟件的編寫(xiě)。

2.7)具備強(qiáng)大的繪圖功能,和 C++ 一樣也可以寫(xiě)出很優(yōu)雅的二維、三維圖形和動(dòng)畫(huà)。

有人說(shuō),C 是 C++ 的子集,C 能做到的事,C++ 一樣能做到,并且還可以做的更好,如:三大面向?qū)ο筇匦?、GUI 編程,誠(chéng)然,我承認(rèn)在 GUI 編程領(lǐng)域 C++ 占據(jù)著絕對(duì)的統(tǒng)治地位,至今無(wú)人能撼動(dòng)。但真的有必要用 C++ 來(lái)替代 C 完成工作嗎?很多時(shí)候 C++ 解決問(wèn)題的思路真的比 C 更先進(jìn)嗎?

三、C 和 C++ 比較

寫(xiě)到這一 段的時(shí)候我有一種戰(zhàn)戰(zhàn)兢兢、如履薄冰的感覺(jué),畢竟 C、C++ 是廣大程序員都很熟悉東西,打起嘴炮來(lái)也是極其恐怖的,其實(shí)在關(guān)乎信仰的問(wèn)題上,任何的爭(zhēng)論都是無(wú)止境的,也是無(wú)意義的。我希望大家不要把大量精力用來(lái)爭(zhēng) 論純粹的語(yǔ)言優(yōu)劣上,而是去思考如何的正確的把事情做好,什么是正確的做事——快速高效的開(kāi)發(fā),保障快速穩(wěn)定的運(yùn)行,快速簡(jiǎn)單的維護(hù)。

下圖是嘴炮大神 Linus Torvalds 當(dāng)年抨擊 C++ 和他周?chē)切?C++ 大牛程序員們的犀利言辭,其實(shí)我個(gè)人并不欣賞 Linus 的個(gè)人風(fēng)格,我還是希望大家能心平氣和的談?wù)?C 相比 C++ 的一些優(yōu)點(diǎn)和現(xiàn)狀:

技術(shù)分享

3.1)隱式操作:C 簡(jiǎn)單直接、結(jié)構(gòu)清晰,每行代碼都能清楚的被反匯編成相應(yīng)的語(yǔ)句,系統(tǒng)會(huì)嚴(yán)格按照你的代碼去執(zhí)行。而 C++ 則不盡然,簡(jiǎn)單的語(yǔ)句也說(shuō)不清楚究竟有多少次構(gòu)造和拷貝,這樣編寫(xiě)底層代碼是完全不行的,底層需要精準(zhǔn)和嚴(yán)格的控制。

3.2) 語(yǔ)言接口:現(xiàn)代軟件工程項(xiàng)目的開(kāi)發(fā),不但對(duì)性能有很高要求,對(duì)于語(yǔ)言接口的對(duì)接能力也有很高要求,因?yàn)橘即蟮囊粋€(gè)項(xiàng)目很少僅使用一種語(yǔ)言來(lái)進(jìn)行開(kāi)發(fā),對(duì)于 底層,C++ 對(duì)內(nèi)存和硬件的控制不如 C 簡(jiǎn)潔精準(zhǔn);對(duì)于很多動(dòng)態(tài)語(yǔ)言和中間件,如:PHP、Python 和 Apache、Redis,都受了 C 的很大影響,甚至就是 C 開(kāi)發(fā)出來(lái)的東西,對(duì)接起來(lái)非常方便。沒(méi)錯(cuò)兒,其實(shí) C++ 采用迂回的方式也能對(duì)接的,但是,遠(yuǎn)遠(yuǎn)不如 C 方便,開(kāi)發(fā)和維護(hù)成本非常高。

3.3)硬件層:

3.2.1>分配內(nèi)存:系統(tǒng)加電后運(yùn)行,經(jīng)過(guò)匯編初始化棧,然后再跳轉(zhuǎn)到 C 語(yǔ)言的 start_init() 函數(shù)去,這時(shí)候內(nèi)存分配機(jī)制都還沒(méi)有建立,C++ 如何定義類(lèi)?如何實(shí)例化對(duì)象?

3.2.2>標(biāo)準(zhǔn)庫(kù)依賴(lài):C 的所有特性都可以不依賴(lài)任何庫(kù)運(yùn)行,如有必要,可以按照特定需求自己編寫(xiě)庫(kù)。

3.2.3>處理器兼容:C++ 的類(lèi)是依賴(lài)基地址+偏移地址的尋址方式,很多微處理器只有簡(jiǎn)單的給定地址尋址,不支持一條語(yǔ)句實(shí)現(xiàn) base + offset 的尋址機(jī)制,很多 C++ 代碼編譯出來(lái)需要更多的指令來(lái)運(yùn)算地址,導(dǎo)致性能下降了太多。

3.4)應(yīng)用層:C++ 在做應(yīng)用層尤其是 GUI 編程,這是 C++ 的傳統(tǒng)強(qiáng)項(xiàng),我一直堅(jiān)持 C 也能優(yōu)雅的做出圖像和動(dòng)畫(huà),但開(kāi)發(fā)效率確實(shí)較 C++ 低很多,最近有個(gè)很火的 RUST 語(yǔ)言,號(hào)稱(chēng)是未來(lái)唯一能取代 C++ 的編程語(yǔ)言,感興趣的同學(xué)可以多關(guān)注下。

四、總結(jié)

下面我列舉了 10 多個(gè)目前熱門(mén)的發(fā)展方向,粗略的介紹了下列項(xiàng)目里最常用的編程語(yǔ)言:技術(shù)分享

由上圖可知,操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)與算法等等基礎(chǔ)知識(shí),是深入理解、掌握和靈活運(yùn)用 C 的重要前提,現(xiàn)階段程序員職業(yè)生涯超過(guò)一半的熱門(mén)方向直接或間接與 C 有關(guān),我想,學(xué)好 C 的重要性也就不言而喻了。

原文:http://www.cnblogs.com/lishiyun19/p/4524765.html

標(biāo)簽: