搜尋
首頁後端開發C++C 和 C 的歷史。第一部分:C語言的產生與標準化。帶類的 C 變為 C

C 和 C 是編寫大量程式碼的標誌性語言。他們經歷了什麼道路才成為一體?本文介紹了 C 的出現及其正式標準化的開始。此外,您還將了解 C with Classes 及其最終轉變為 C 。

History of C and C  . Part one: emergence and standardization of C language. C with Classes becomes C

1969 — 1973 C生於世

1969。阿波羅 11 號訪問月球。 AT&T 貝爾實驗室開發了一種我們今天熟知的 C 語言。此時,Unix 作業系統正處於早期開發階段。

事實上,C 語言繼承了 B 語言的主要功能。以及它名字的由來。至於Unix,最初是用組合語言實現的,甚至沒有高階語言的編譯器。該專案的開發歸因於C語言創建的原因之一。

1971 年,C 語言的編譯器和一些實用程式被包含在 Unix 的第二個版本中。 1973 年,Unix 核心主要是用 C 寫的。

1978. 這本書成為第一個規範

Dennis Ritchie 和 Brian Kernighan 於 1978 年 2 月 22 日出版了第一版《C 程式語言》。這本書是第一本廣泛使用的 C 語言材料。

History of C and C  . Part one: emergence and standardization of C language. C with Classes becomes C

圖N1 - 《C 程式語言》第一版的封面

從發佈到第一個官方語言認證,它已經成為 C 開發的標準。這個「標準」被稱為 K&R——以作者姓氏的第一個字母命名。

本書介紹了「Hello World」程式作為最小工作程序的範例。 1978 年之後,幾乎所有有關程式語言的書籍都離不開這個程式碼範例。如今,將“Hello World”作為您的第一個程式顯示已成為既定的傳統。

#include <stdio.h>

main()
{
    printf("Hello, World\n");
}
</stdio.h>

K&R 展示了多種語言特性。例如,結構體 - 一組多個變數分組在一個名稱下以便於引用,以及 long intunsigned int 資料型別。

帶有賦值的加法/減法運算子在 K&R C 中也發生了變化。以前,要將數值加一,必須編寫 a = 1,但這類運算子會讓 C 編譯器感到困惑。此外,從人類的角度來看,a = 1(加一)和a = 1(賦值)之間的差異看起來相當脆弱。正是在K&R C,這些算子變成了我們熟悉的算子-a = 1.

書中的程式碼範例採用統一的風格設計,也以創建者姓氏的首字母命名。 K&R 風格以使用八個空格作為主要縮排而聞名(儘管更常用的是四個空格)。它也被稱為“核心風格”,因為 Unix 核心就是用這種風格編寫的。

#include <stdio.h>

main()
{
    printf("Hello, World\n");
}
</stdio.h>

1979. C 與類

1979 年 5 月,貝爾實驗室員工 Bjarne Stroustrup 開始開發一個系統,該系統將成為第一個 Unix 叢集。換句話說,他開始創建一個分散式運算系統,連接到由多台電腦組成的公共網路。

問題是缺乏合適的工具包。在現有的程式語言中,有兩種​​選擇可以幫助解決這個問題,但兩者都有細微差別。 BCPL 語言速度很快,但不適合大型項目,因為它非常接近低階語言。另一方面,物件導向的程式語言 Simula 適合這項任務,但速度相當慢。因此 Stroustrup 開始實現他自己的基於 C 的語言。

早在 1979 年 10 月,向 C 增加類別的 CPRE 預處理器就準備好了。這種語言稱為 C with Classes。人們可以編寫程式碼並將其傳遞給預處理器。然而,它仍然被認為是 C 的擴展。

除了類別之外,帶有類別的 C 的第一個版本還包括:

  • 衍生類,但還沒有虛函數;
  • 存取控制;
  • 建構子與析構函式;
  • 朋友班;
  • 函數參數類型的控制和轉換。

1983.ANSI C

語言越來越受歡迎:

  • C 開始取代 Basic 成為微型電腦程式設計的主導語言;
  • 新的編譯器出現了。更重要的是,它們是由沒有直接參與語言開發的人編寫的。

但即使有這樣的人氣,C也只有K&R的不言而喻的水準。編譯器的開發人員對該語言引入了許多非標準的變更。這就是程式碼可移植性問題開始升溫的時候。鑑於這一系列問題,第一個 C 標準開始出現。

1983年,美國國家標準協會(ANSI)成立了一個委員會來起草該規範。標準化程序直到 1989 年才結束,當時該語言的第一個標準被批准為「ANSI X3.159-1989:程式語言 C」。同年,《C 程式語言》一書的第二版出版,描述了標準中出現的語言。在一年的時間裡,該標準經過微小修改就獲得了國際標準化組織(ISO)的批准。

History of C and C  . Part one: emergence and standardization of C language. C with Classes becomes C

圖N2 - 《C 程式語言》第二版的封面

除了自 K&R 以來語言發生的一些變化之外,該標準還包括全新的功能,例如函數原型和更複雜的預處理器。該標準還包括對標準庫組成的描述。此外,一些之前沒有定義的手段被給出了更精確的定義。

1983.C 與課程C

1982 年,Bjarne Stroustrup 開始致力於改變 C with Classes 的狀態,其創作者稱之為「中等成功」。從那時起,開發編譯器花了一年的時間。 Cfront 於 1983 年問世。

它的主要功能是將帶有類別的 C 語言轉換為 C 程式碼。之後,轉換後的程式碼被傳遞給C編譯器。此功能使更多人能夠使用該編譯器,並在現有的 Unix 基礎設施上使用它。

隨著語言的發展,它的名稱發生了多次變化。它最初被稱為 C84,因為社區簡稱它為 C。然而,這個名稱也具有誤導性,因為它更像是一個新的 C 標準,而不是該語言的子集。而這其實並沒有幫助解決以前名字的問題。最終語言被稱為 C ,即 C 和增量運算子。

從有類別的 C 遷移到 C 時,語言中出現了其他新功能:

  • 虛函數;
  • 函數名稱和運算子重載;
  • 參考文獻;
  • 常數;
  • 改進的類型檢查;
  • 使用者控制的自由儲存記憶體控制。

至今仍在使用的註釋風格在語言發展的這個階段紮根。該樣式也用於其他語言。

這就是C在沒有正式認證之前的生活。 Stroustrup 相當迅速地回應了程式設計師社群的請求。他正在出版代表該語言標準描述的作品。所以,該語言得以維持主要歸功於其創作者的努力。

1985 年。 「C 程式語言」。

1985 年 2 月,C 的第一個可發行版本發布。同年 10 月,語言創始人 Bjarne Stroustrup 發布了第一版《C 程式語言》一書。

History of C and C  . Part one: emergence and standardization of C language. C with Classes becomes C

圖N3 - 《C 程式語言》第一版的封面

它就像 Kernighan 和 Ritchey 的書《C 程式語言》一樣成為 C 語言的第一個預設標準。直到第一個官方標準。

在書中,Stroustrup 從 C 角度涵蓋了語言特性和設計問題,並用大量程式碼範例為每一點增添了趣味。

此後,這本書又重印了三次,每次都有語言更新。在撰寫本文時,最新的第 4 版包含 C 11 標準。

1989.C 2.0

1989年7月,Cfront 2.0編譯器發布。它與之前的版本相比有了很大的修改,也為C語言帶來了新意。

此時,模板已成為熱門話題。沒有人懷疑它們會被實施,因為這是一個現實的目標。至於另一個潛在的突出特性——多重繼承——對程式設計社群的創建者來說是一個真正的挑戰。許多人說在 C 實現多重繼承是不可能的。例如,在 Simula 中,由於垃圾收集器不可避免的複雜性,類似的建議被拒絕。然而,多重繼承是非常需要的,因為它會大大簡化函式庫的開發,如果沒有多重繼承,函式庫的程式碼會變得相當麻煩。

所以,Cfront 2.0 終究還是加入了多重繼承。這種語言的加入引發了爭議。例如,有些人認為,物件導向程式設計的縮影 Smalltalk 語言不具有多重繼承。這就是為什麼C當然不應該採用它。語言的創造者認為這種反應是因為過度重視多重繼承而造成的。

上面的C版本也介紹了:

  • 指向成員的指針,允許建立指向非靜態欄位和函數的指針;
  • 靜態和const成員函數;
  • 存取修飾符受保護;
  • 類型安全連結;
  • 抽象類別;
  • 新建刪除特定於類別;

1990. 博蘭C

1990 年,Borland 發布了 Borland C 整合開發環境,用於開發 C 和 C 程式(真是一個轉折,哈?)。它最初是為了在 DOS 下開發,但後來也引入了 Windows 支援。

History of C and C  . Part one: emergence and standardization of C language. C with Classes becomes C

圖 N4 - Borland C 的螢幕截圖

從歷史上看,Borland C 是 Turbo C 的後代,但融合了 C 的特點——支援物件導向程式設計。

每個版本的環境都有自己的編譯器支援自己的標準。隨著時間的推移,Borland C 獲得了許多用於快速應用程式開發的專用程式庫。

Borland C IDE 的最後一個版本於 1997 年發布,之後被 Borland C Builder 系列所取代。 Borland C 的終結是在 2000 年,隨著帶有編譯器的 Borland C 5.5 的發布。

Borland C 是一個非常舒適的 DOS 編輯器。甚至還有某種語法著色。

PVS-Studio分析器C和C核心架構師Yuri Minaev

Borland 四年後,微軟發布了 Visual C 整合開發環境。

1990. C 語言的模板與異常處理機制

1986 年,Bjarne Stroustrup 寫了一篇文章《什麼是物件導向程式設計? 》其中他指出了 C 的三個缺陷:

  • 缺乏對參數化類型的支援;
  • 缺乏標準的異常處理機制;
  • 缺乏多重繼承。

多重繼承於 1989 年隨 C 2.0 引入,其餘缺陷於 1990 年透過新的語言功能修復。 Stroustrup 在《Annotated C Reference Manual》一書中對它們進行了描述。

模板和異常處理很快就相繼出現。模板於 7 月在西雅圖獲得批准,異常處理機制於 11 月在帕洛阿爾托獲得批准。它們的發布之所以接近,是因為這兩項創新都解決了類似的問題。根據語言創建者本人的說法,模板可讓您透過擴展靜態類型系統的功能來減少程式執行期間​​的錯誤數量。而異常允許您處理剩餘的錯誤。

參數化類型早在 C 的第一版就被考慮過。然而,由於缺乏時間對設計和實施問題進行充分研究,它們不得不推遲。出於同樣的原因,例外情況也被推遲。這並不是毫無意義的。他們的設計從1984年持續到1989年。

《帶註釋的 C 參考手冊》也介紹了命名空間以及運行時識別類型的能力。

通用程式設計從那時開始獲得動力。使用模板的 C 並不是先驅。在創建模板時,創建者從 ML、CLU 和 Ada 程式語言中汲取靈感。

但是,可以肯定地說,C 語言正在推廣這種範式。在許多情況下,模板使得無需巨集即可編寫程式碼成為可能,從而減少了搬起石頭砸自己腳的機會。美中不足的是,只有 C 20 才出現了簡化泛型程式設計工作的完整操作功能。但即便如此,當程式設計師了解到模板可以在編譯階段啟用計算時,他們並沒有停下來...

另一方面,C 的異常並不是那麼明確。不幸的是,與早期的方法相比,他們並沒有解決所有的錯誤處理問題。使用異常時,控制流變得非常重要。有很多方法會搬起石頭砸自己的腳,例如私有繼承異常、按值捕獲異常、或以錯誤的順序排列 catch 區塊等。因此,一些編碼標準禁止使用它們,例如 Google C 代碼風格。

Philipp Khandelyants,PVS-Studio C 和 C 開發團隊的團隊負責人

《帶註釋的 C 參考手冊》在某種程度上已成為官方 C 標準化的先驅。它描述了所有很快就會成為該語言標準的創新。

在下一個系列中...

在這篇文章中,我們介紹了從 1969 年到 1990 年 C 和 C 的歷史事件。在下一篇文章中,我們將深入研究從 1991 年到現在的 C 歷史:

  • Bjarne Stroustrup 關於 C 語言如何創建的書;
  • C 98是第一個官方標準;
  • C99—C 繼續前進;
  • 技術報告1-紙上的新C特性;
  • Viva64 版本,稍後 — PVS-Studio;
  • C 記錄已取得的成就(C99、C11),C 獲得動力(C 11、C 17);
  • C 20 和 C 23。

以上是C 和 C 的歷史。第一部分:C語言的產生與標準化。帶類的 C 變為 C的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C社區:資源,支持和發展C社區:資源,支持和發展Apr 13, 2025 am 12:01 AM

C 學習者和開發者可以從StackOverflow、Reddit的r/cpp社區、Coursera和edX的課程、GitHub上的開源項目、專業諮詢服務以及CppCon等會議中獲得資源和支持。 1.StackOverflow提供技術問題的解答;2.Reddit的r/cpp社區分享最新資訊;3.Coursera和edX提供正式的C 課程;4.GitHub上的開源項目如LLVM和Boost提陞技能;5.專業諮詢服務如JetBrains和Perforce提供技術支持;6.CppCon等會議有助於職業

c#vs. c:每種語言都擅長c#vs. c:每種語言都擅長Apr 12, 2025 am 12:08 AM

C#適合需要高開發效率和跨平台支持的項目,而C 適用於需要高性能和底層控制的應用。 1)C#簡化開發,提供垃圾回收和豐富類庫,適合企業級應用。 2)C 允許直接內存操作,適用於遊戲開發和高性能計算。

繼續使用C:耐力的原因繼續使用C:耐力的原因Apr 11, 2025 am 12:02 AM

C 持續使用的理由包括其高性能、廣泛應用和不斷演進的特性。 1)高效性能:通過直接操作內存和硬件,C 在系統編程和高性能計算中表現出色。 2)廣泛應用:在遊戲開發、嵌入式系統等領域大放異彩。 3)不斷演進:自1983年發布以來,C 持續增加新特性,保持其競爭力。

C和XML的未來:新興趨勢和技術C和XML的未來:新興趨勢和技術Apr 10, 2025 am 09:28 AM

C 和XML的未來發展趨勢分別為:1)C 將通過C 20和C 23標準引入模塊、概念和協程等新特性,提升編程效率和安全性;2)XML將繼續在數據交換和配置文件中佔據重要地位,但會面臨JSON和YAML的挑戰,並朝著更簡潔和易解析的方向發展,如XMLSchema1.1和XPath3.1的改進。

現代C設計模式:構建可擴展和可維護的軟件現代C設計模式:構建可擴展和可維護的軟件Apr 09, 2025 am 12:06 AM

現代C 設計模式利用C 11及以後的新特性實現,幫助構建更靈活、高效的軟件。 1)使用lambda表達式和std::function簡化觀察者模式。 2)通過移動語義和完美轉發優化性能。 3)智能指針確保類型安全和資源管理。

C多線程和並發:掌握並行編程C多線程和並發:掌握並行編程Apr 08, 2025 am 12:10 AM

C 多線程和並發編程的核心概念包括線程的創建與管理、同步與互斥、條件變量、線程池、異步編程、常見錯誤與調試技巧以及性能優化與最佳實踐。 1)創建線程使用std::thread類,示例展示瞭如何創建並等待線程完成。 2)同步與互斥使用std::mutex和std::lock_guard保護共享資源,避免數據競爭。 3)條件變量通過std::condition_variable實現線程間的通信和同步。 4)線程池示例展示瞭如何使用ThreadPool類並行處理任務,提高效率。 5)異步編程使用std::as

C深度潛水:掌握記憶管理,指針和模板C深度潛水:掌握記憶管理,指針和模板Apr 07, 2025 am 12:11 AM

C 的內存管理、指針和模板是核心特性。 1.內存管理通過new和delete手動分配和釋放內存,需注意堆和棧的區別。 2.指針允許直接操作內存地址,使用需謹慎,智能指針可簡化管理。 3.模板實現泛型編程,提高代碼重用性和靈活性,需理解類型推導和特化。

C和系統編程:低級控制和硬件交互C和系統編程:低級控制和硬件交互Apr 06, 2025 am 12:06 AM

C 適合系統編程和硬件交互,因為它提供了接近硬件的控制能力和麵向對象編程的強大特性。 1)C 通過指針、內存管理和位操作等低級特性,實現高效的系統級操作。 2)硬件交互通過設備驅動程序實現,C 可以編寫這些驅動程序,處理與硬件設備的通信。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具