學習C的重要性

2020-08-14 21:08:15

C到底有多重要

我曾聽人說過,我們所學過的c只是冰山一角,只是一些語法,語意,規則什麼的。c語言難嗎,難,光是這些語法,我們能夠理解透徹就算不錯了。而真正精通c語言是冰山下面 下麪的部分。是毁滅譚泰尼克號的真正力量。
C 作爲一門工程實用性極強的語言,提供了對操作系統和記憶體的精準控制,高效能的執行時環境,原始碼級的跨平臺編譯等優點,纔是我們必須學習和使用 C 的理由。
在这里插入图片描述

歷史

C 語言是由美國 AT&T 貝爾實驗室的研究員 Dennis Ritchie 在 B 語言的基礎上,最初作爲改造 Unix 操作系統的開發語言,並伴隨着 Unix 操作系統興起而流行,後來,隨着微型計算機的發展,C 開始被移植到其他操作系統平臺上,成爲獨立的程式設計語言。

下圖摘自 TIOBE 程式語言排行榜,過去 30 年 90% 時間裏 C 都是獨領風騷的,僅偶爾被 Java 超越
在这里插入图片描述
應用的行業總結
在这里插入图片描述

C語言優點

結構化設計語言,語法清晰、結構簡單,模組化使得程式的各個部分除了必要的資訊交流外彼此獨立,便於開發、偵錯以及偵錯。

1)運算子多,把括號、賦值、強制型別轉換等都作爲運算子處理,靈活使用各種運算子可以實現在其它高階語言中難以實現的運算。

2)數據結構豐富,能實現各種複雜的數據型別的運算,引入指針、結構體概念使程式效率更高。

3)爲操作系統而生,可以像彙編語言一樣對位、位元組和地址進行操作,允許直接存取實體地址對硬體進行操作,把高階語言的基本結構和語句與低階語言的實用性結合起來。

4)程式執行效率高,一般比彙編程式生成的目的碼效率低 10%~20%。

5)可移植性好,C 語言抽象了針對 CPU 程式設計的細節,能廣泛應用於針對大型操作系統和系統軟體的編寫。

6)具備強大的繪圖功能,和 C++ 一樣也可以寫出很優雅的二維、三維圖形和動畫。

詳細的說下c的應用的優點和C++做對比

1)隱式操作:C 簡單直接、結構清晰,每行程式碼都能清楚的被反彙編成相應的語句,系統會嚴格按照你的程式碼去執行。而 C++ 則不盡然,簡單的語句也說不清楚究竟有多少次構造和拷貝,這樣編寫底層程式碼是完全不行的,底層需要精準和嚴格的控制。

2) 語言介面:現代軟體工程專案的開發,不但對效能有很高要求,對於語言介面的對接能力也有很高要求,因爲偌大的一個專案很少僅使用一種語言來進行開發,對於 底層,C++ 對記憶體和硬體的控制不如 C 簡潔精準;對於很多動態語言和中介軟體,如:PHP、Python 和 Apache、Redis,都受了 C 的很大影響,甚至就是 C 開發出來的東西,對接起來非常方便。沒錯兒,其實 C++ 採用迂迴的方式也能對接的,但是,遠遠不如 C 方便,開發和維護成本非常高。

硬體層:
1>分配記憶體:系統加電後執行,經過彙編初始化棧,然後再跳轉到 C 語言的 start_init() 函數去,這時候記憶體分配機制 機製都還沒有建立,C++ 如何定義類?如何範例化物件?

2>標準庫依賴:C 的所有特性都可以不依賴任何庫執行,如有必要,可以按照特定需求自己編寫庫。

3>處理器相容:C++ 的類是依賴基地址+偏移地址的定址方式,很多微處理器只有簡單的給定地址定址,不支援一條語句實現 base + offset 的定址機制 機製,很多 C++ 程式碼編譯出來需要更多的指令來運算地址,導致效能下降了太多。

4)應用層:C++ 在做應用層尤其是 GUI 程式設計,這是 C++ 的傳統強項,我一直堅持 C 也能優雅的做出影象和動畫,但開發效率確實較 C++ 低很多,最近有個很火的 RUST 語言,號稱是未來唯一能取代 C++ 的程式語言,感興趣的同學可以多關注下。

學習C語言的方法

實話實說,C 是一門很難學習和使用的程式語言,沒有編譯原理、操作系統,數據結構與演算法,和計算機體系結構紮實的基礎知識,根本不可能把 C 學的明白、用的順手。
但是現在已經是漫天資訊和網際網路的時代,以前只是匱乏的時候說知識就是力量,而現在圖書館的知識最多,可它並沒有改變世界的力量,只有把知識應用起來纔是力量,資訊我們已經不缺乏,缺少的是如何轉化爲自己的知識並且應用起來獲取力量。
學法方法也是最終的,有一套好的學習方法是我們持續進步的法寶,現在技術更新換代很快,只有掌握快速學習的方法才能 纔能跟得上時代,我想說的是我們要自己找適合自己的學法方法,不要聽別人說,更不要把別人的方法拿過來就用,思考方法和解決問題的能力纔是我們根本的競爭力,有點扯遠了
一:根據我自己的能力,首先沒必要深入研究,那是工作後的事情
二:對着視訊學習,然後找面試題,查漏補缺針對知識點強化
三:做大量的練習,哪怕是照着抄都所謂,能理解能看懂就行。
四:一定要自己做個專案。