c程式設計的特點,使其獨特(和更好)

C程式語言是所有現代程式語言之母。幾乎現在使用的每一種語言都包含了一些最早出現在C語言中的特性。...

C編程語言是所有現代編程語言之母。幾乎現在使用的每一種語言都包含了一些最早出現在C語言中的特性。它已被廣泛用於為最小的嵌入式微型計算機向最大的大型機和超級計算機編寫軟件。

characteristics-c-programming

用C語言編寫的應用程序種類繁多,從系統軟件、桌面軟件、企業軟件、數據庫等等。掌握C語言的基礎知識,你就能很好地開始編程生涯。

c語言簡史

C語言的發展與Unix密切相關。它是在1972年左右發展起來的,後來又增加了一些。

在C語言開發之前,Unix操作系統是使用其彙編語言為PDP-7計算機開發的。後來在這個平臺上構建了一個C編譯器,再次使用匯編語言。在這個時候,C被設計用來簡化Unix本身的開發。使用這個編譯器,Unix完全用C語言為PDP-11計算機重寫。同樣,C語言編譯器是用C重寫的(當然,在優秀的lex和yacc工具的幫助下),從而完成了C/Unix引導過程。

Unix用C重寫的主要原因是為了可移植性。由於不同CPU體系結構的彙編語言是不同的,因此將Unix操作系統移植到每個體系結構將是一項重大的工作。通過開發諸如C之類的系統語言,並用C重寫Unix操作系統,這項工作減少了幾個數量級。

一旦這種語言被開發出來,人們就認識到它可以用來編寫比系統軟件多得多的東西。因此,C開始用於編寫軟件,如文件服務器、數據庫服務器、網絡堆棧、桌面軟件(以及後來的web服務器)等。

c programming language first edition cover

1978年,briankernighan和dennisritchie出版了《C編程語言》一書。這本書作為非正式的C語言規範使用了很多年,直到1989年C被ANSI正式標準化。C的最新版本是C11,發佈於2011年。

現在讓我們看看C的一些特性,這些特性使它與眾不同。

c與c++:它們有聯繫嗎?

隨著越來越複雜的軟件是用C語言開發的,人們認識到面向對象的概念(包括封裝、多態性等)將有助於管理複雜性。這導致了C++作為C的超集的發展。

C++是在編寫面向對象軟件時增加某些特徵,同時又保持C++的兼容性。它是用漸進增強的思想發展起來的——對C語言進行兼容的修改,使C和C++模塊可以在同一程序中結合,並用同一編譯器編譯。這使得舊的基於C的模塊能夠在使用面向對象概念編寫的大型程序中以最小的更改被重用。

理論上,C程序可以由C++編譯器編譯而不需要任何更改。然而,在實踐中,C++強制執行的更嚴格類型檢查會導致錯誤,需要對代碼進行一些更改。

少量關鍵字

儘管C語言很強大,但它一直是一種小型語言。這是因為它只將32個單詞聲明為具有特定含義的關鍵字。相比之下,C++聲明瞭82個關鍵字,java有50個保留關鍵字,JavaScript有63個。COBOL聲明瞭高達357個關鍵字。想象一下,要記住和避開這麼多的關鍵字是多麼令人頭痛!

沒有顯式字符串類型

與大多數現代語言不同,例如java、C++和JavaScript,C不提供單獨的字符串類型。字符串被認為是以0字符(表示為“\0”)結尾的字符數組。字符串的長度由約定表示:0字符之前的字符數。您可以忽略它,並在“\0”之後計數或存儲。由於缺少合適的字符串類型和約定,多年來導致了無數的錯誤,稱為緩衝區溢出。

事實上,第一個攻擊互聯網的蠕蟲,Morris互聯網蠕蟲,就是一個被稱為finger daemon的關鍵系統軟件中的漏洞造成的。

下面是這樣一個bug的例子。它說明了在程序中引入這樣的bug是多麼容易。程序編譯良好,但由於緩衝區溢出而崩潰。

# include <stdio.h>main(){ char *buf = "hello world"; buf[12] = 'a'; printf("%s", buf);}

相比之下,大多數現代語言都提供了顯式的字符串類型,這使得這種惡作劇成為不可能。即使編譯上述代碼精細的C++,也提供了一個顯式的STD::string類型。

指針操作

指針是對內存位置的引用。在讀寫任意內存位置時,C是完全靈活的。這種靈活性需要付出巨大的代價,並且是軟件領域中許多錯誤的原因。影響整個互聯網的最顯著的缺陷包括web服務器、郵件服務器和ftp服務器中的漏洞。即使在今天,偶爾也會有關於引用和更新無效內存位置導致的錯誤的新聞報道。

pointers

2014年發現的臭名昭著的SSL HeartBleed安全漏洞是指針位置管理不當的結果,說明了在C中正確管理指針的重要性。

甚至在Windows系統上偶爾出現的BSOD(“藍屏死亡”)錯誤也可能是由於指針處理不當造成的。

除了C++之外,語言不允許指針操作,因此不易受這些類錯誤的影響。

數組和指針可以互換

在C中,數組引用和指針是可互換的。這種語言允許在需要指針的地方使用數組引用,反之亦然。雖然這允許強大的操作,但它也導致了許多臭名昭著的錯誤。

廣泛使用“define”宏

宏用於替換不同擴展名的名稱。它們可用於在編譯時更改名稱的定義,或用較長的擴展名替換簡單名稱。C宏系統支持允許條件編譯的ifdef條件。這是將軟件移植到不同體系結構和操作系統的一種方法。泛型名稱在編譯時定義並替換為不同條件下的不同擴展。

還可以包括或消除使用這些宏編譯的整個代碼段。

它們被禁止,但在C++中可用。其他語言(如Java、JavaScript、python等)不提供類似的功能。

封裝在文件中的模塊

C沒有類的概念,因此不支持獨立的公共、私有和受保護可見性的概念。C提供的唯一封裝是文件的封裝。在源文件中定義的函數、全局變量和類型僅在該文件中可見,除非導出名稱。關鍵字static和extern用於控制變量名和函數名的可見性。

相比之下,其他語言,如C++、java和Python,一般支持類,以及與類一起使用的封裝。

外部庫

除了基本的語言構造,C中更復雜的功能被委託給外部庫。字符串操作、數學、輸入輸出、網絡等都由外部庫提供。與此相反,其他語言通常都有一個存儲良好的模塊庫。

這涵蓋了C語言的一些基本特性,特別是那些使它區別於其他語言的特性。

你和C一起工作過嗎?你喜歡它還是更喜歡用其他語言?請在下面的評論中解釋。

  • 發表於 2021-03-13 04:35
  • 閱讀 ( 50 )
  • 分類:程式設計

你可能感興趣的文章

lg g4(lg g4)和v10型(v10)的區別

...動狀態時,輔助螢幕將顯示需要快速訪問的聯絡人、應用程式和關鍵功能。 效能 內部硬體與LG G4幾乎相同。LG G4也有不錯的配置,這對LG V10來說是件好事。電源由Snapdragon 808處理器提供。Snapdragon 810受到過熱問題的影響,這也是...

  • 發佈於 2020-10-25 20:16
  • 閲讀 ( 46 )

lg g4(lg g4)和巨集達一號m9(htc one m9)的區別

...C One M9擁有Adreno 418 GPU和3 GB RAM,足以運行當今複雜的應用程式。它還可以支援32GB的內部儲存空間。HTC One M9執行在Android棒棒糖5.0上,使用者介面是Sense 7。 電池容量為2840毫安時,為可拆卸電池。One M9使用高通公司的Quick Charge 2.0...

  • 發佈於 2020-10-29 02:24
  • 閲讀 ( 51 )

索尼xperia z3(sony xperia z3)和巨集達一號m8(htc one m8)的區別

...更多的電池電量。配備四核處理器和3GB RAM,在執行應用程式時速度很快,並由LTE提供動力,網際網路速度也很快。寬視角1080×1920解析度的顯示器,藉助於X-Reality等特性,可以呈現非常清晰的圖形。它附帶的作業系統是Android KitKa...

  • 發佈於 2020-10-29 15:11
  • 閲讀 ( 52 )

索尼ps2(sony ps2)和第三季(ps3)的區別

...常吸引使用者的平臺,因為它使PS2能夠玩為原始PlayStation設計的遊戲。這一功能包括PS2遊戲列表中的大量Playstati遊戲。PS3可透過軟體模擬向後相容Playstati,但可向後相容PS2。PS3的第一代遊戲機可以在一定程度上玩PS2遊戲,但是PS3...

  • 發佈於 2020-11-03 21:55
  • 閲讀 ( 49 )

lg v10(lg v10)和華為g8(huawei g8)的區別

...即使主顯示器關閉,它也可以保持開啟,顯示資訊、應用程式和小部件。 輔助顯示器的另一個優點是,它可以顯示來電、簡訊和其他資訊,同時不會中斷或佔用主顯示器上的空間。這是一個令人印象深刻的功能只有LG V10可以誇...

  • 發佈於 2020-11-09 22:34
  • 閲讀 ( 54 )

為什麼java虛擬機器可以幫助程式碼更好地執行

您目前是否正在討論是將java用於下一個應用程式,還是使用本機工具包和框架?您想知道java為應用程式提供了哪些優於本機程式設計的優勢嗎?繼續讀下去! ...

  • 發佈於 2021-03-13 07:13
  • 閲讀 ( 54 )

你喜歡貓嗎?8款專為愛貓人士設計的智慧手機遊戲

不可否認,網際網路愛貓。尤其是在模因方面。你甚至可能有一隻或兩隻貓,或者只是希望你有自己的貓。如果是後者,你可能會透過別人的貓咪照片來替代生活。你這個可憐的,不養貓的人。 ...

  • 發佈於 2021-03-25 16:46
  • 閲讀 ( 49 )

十佳面部過濾手機應用完美自拍

... 值得慶幸的是,有一些面部過濾應用程式可以幫助你提升你的**水平,讓你在糟糕的日子裡看起來完美無瑕。如果你想在你的**中看起來完美,這裡有適合Android和iPhone的最佳面部過濾應用,你可以馬上下載。 ...

  • 發佈於 2021-03-29 00:06
  • 閲讀 ( 65 )

comfile升級其堅固的樹莓皮面板電腦

... 為真實世界設計 ...

  • 發佈於 2021-03-29 20:14
  • 閲讀 ( 45 )

你能買到的最好的chromebooks,2017版

...題是:你生活在瀏覽器中嗎?如果Chrome是你最常用的應用程式,你在電腦上95%以上的工作都是圍繞Chrome進行的,那麼Chromebook對你來說會非常好用。有很多基於Chrome的應用程式可以滿足你另外5%的計算需求,但同樣的,你需要做一...

  • 發佈於 2021-04-07 01:39
  • 閲讀 ( 51 )
潮想力inforce
潮想力inforce

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦