C語言的歷史

C 語言是一種 通用的、過程式的編程語言,由 丹尼斯·里奇(Dennis Ritchie) 在 1972 年于貝爾實驗室開發。它以 高效、靈活、貼近硬件 而著稱,廣泛應用于系統軟件、嵌入式系統、驅動程序、游戲引擎、數據庫系統等底層開發領域。

C語言的發展歷史

1. 起源:B語言和BCPL語言

  • C語言的前身是?B語言,由?肯·湯普遜(Ken Thompson)?在 1970 年開發,用于在 PDP-7 計算機上開發 Unix 操作系統。
  • B語言又源于?BCPL語言(Basic Combined Programming Language),這是一種在 1960 年代末設計的系統編程語言。

2. C語言的誕生(1972年)

  • 丹尼斯·里奇?在 B 語言的基礎上開發了 C 語言,加入了類型系統、結構體、指針等特性。
  • C語言最初用于重寫 Unix 操作系統,使得 Unix 能夠更容易地移植到不同的硬件平臺上。

3. K&R C(1978年)

  • 1978年,Brian Kernighan 和 Dennis Ritchie?合著出版了《The C Programming Language》一書,這本書成為 C 語言的標準參考書,書中描述的 C 語言版本被稱為?K&R C
  • 這是 C 語言的非正式標準,也是 C 語言普及的起點。

4. ANSI C / C89(1989年)

  • 為了統一 C 語言的標準,美國國家標準協會(ANSI)?在 1989 年制定了第一個官方標準,稱為?ANSI C?或?C89
  • 這是第一個正式的 C 語言標準,也被 ISO 采納為?ISO C90

5. C99(1999年)

  • 1999年,ISO 發布了新的 C 標準:C99
  • 新增了:
    • 單行注釋?//
    • 變長數組(VLA)
    • 內聯函數
    • 布爾類型?_Bool
    • 支持混合聲明和代碼
    • 更多數學函數和頭文件

6. C11(2011年)

  • 2011年發布的?C11?是 C 語言的最新正式標準。
  • 新增了:
    • 多線程支持(<threads.h>
    • 泛型選擇?_Generic
    • 對齊控制
    • 匿名結構和聯合
    • 更安全的函數(如?gets_s?替代?gets

7. C17 / C18(2018年)

  • 2018年發布的?C17(或 C18)?是對 C11 的小幅度修訂,主要是修復錯誤和不一致之處,沒有引入重大新特性。

8. C23是C語言標準的一次重大修訂

新版本的gcc和clang實現了C23的大部分新語言功能,但是部分功能仍然缺失,例如:constexpr 存儲類說明符,[[unsequenced]] 和 [[reproducible]] 屬性等等。

  • 替換宏為關鍵字:thread_local(原thread_local())、constexpr(原constexpr存儲類說明符)、alignas(原_Alignas) ?
  • 新增關鍵字:bool(布爾類型)、nullptr_t(空指針類型) ?
  • 支持類型推斷:使用auto聲明變量時自動推斷類型 ?
  • 新增[[nodiscard]]屬性強制處理函數返回值,避免內存泄漏;新增檢查宏(如ckd_add()ckd_mul())確保位操作不會溢出。

C語言的重要性

  • C語言是現代編程語言的基礎,很多語言如 C++、Java、C#、Python、Go 等都受到 C 語言的影響。
  • 它是學習?計算機底層原理?的最佳語言之一,有助于理解內存管理、指針、數據結構等核心概念。
  • 操作系統、編譯器、數據庫等底層系統?幾乎都使用 C 或 C++ 實現。

c語言開發工具

下載 Visual Studio Tools - 免費安裝 Windows、Mac、Linux

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92318.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jupyter使用

啟動win rcmdjupyter notebook創建python文件

linux 環境服務發生文件句柄泄漏導致服務不可用

問題描述&#xff1a;服務調用遠程rest接口 報錯&#xff0c;發生too many open files 異常&#xff0c;系統句柄資源耗盡&#xff0c;導致服務不可用。排查經過&#xff1a;1、針對報錯代碼進行本地構建&#xff0c;構造異常&#xff0c;并進行壓測。問題未復現2、經過討論分析…

手機錄制視頻時,硬編碼和軟編碼哪個質量高?(硬件編碼、軟件編碼)

文章目錄**1. 畫質對比**- **軟編碼**&#xff1a;- **硬編碼**&#xff1a;**2. 性能與功耗**- **軟編碼**&#xff1a;- **硬編碼**&#xff1a;**3. 實際應用中的權衡****4. 現代手機的折中方案****5. 如何選擇&#xff1f;****總結**在手機錄制視頻時&#xff0c; 軟編碼的…

IPv4與IPv6雙棧協議:網絡過渡的關鍵技術

為什么需要IPv4與IPv6共存&#xff1f; 在網絡技術的世界中&#xff0c;兼容性問題始終是最大的挑戰之一。IPv4和IPv6之間存在根本性的不兼容性&#xff0c;這意味著使用不同協議的設備無法直接通信。這種情況就像是兩個人試圖用完全不同的語言進行對話一樣。 目前的網絡現狀…

【牛客刷題】數字變換

一、題目描述 給出兩個數字a,ba,ba,b,aaa每次可以乘上一個大于1的正整數得到新的aa

MySQL 學習一 存儲結構和log

1.InnoDB邏輯存儲結構 表空間->段->區->頁->行->數據表空間&#xff1a;覆蓋了所有的數據和索引&#xff0c;系統表在系統表空間&#xff0c;還有默認表空間等 段&#xff1a;多個段組成表空間 區&#xff1a;多個區組成段&#xff0c;一般每個區的大小通常是1M…

TCP day39

六&#xff1a;C/S和B/S端 C/S&#xff1a;Client, server B/S&#xff1a;Browser server 1.cs 專用客戶端 bs 通用客戶端 2.協議不同 Cs 標準協議&#xff0c;自定義協議 Bs http 超文本傳輸 3.cs 功能復雜 bs 功能弱 4.bs 資源都在ser&#xff0c;有ser發送到cli cs 大部分資…

6 種無線傳輸照片從安卓到 Mac 的方法

將大量照片從安卓設備傳輸到電腦上&#xff0c;不僅可以備份照片&#xff0c;還能釋放設備存儲空間。雖然使用 USB 數據線可以在 Windows 電腦上輕松完成傳輸&#xff0c;但將安卓手機連接到 Mac 并非如此簡單。因此&#xff0c;許多用戶更傾向于無線傳輸照片從安卓到 Mac。您可…

在vscode 使用 remote-ssh

vscode安裝插件Remote-SSH,直接安裝即可 安裝完畢之后 在左下角有這個圖標 點擊之后選擇連接到主機然后選擇添加新鏈接之后輸入用戶名和主機地址 非默認端口使用 -p 端口號之后選擇第一個即可如果使用的是密碼,直接連接,然后輸入密碼即可如果使用的密鑰,則修改.ssh\config文件中…

RabbitMQ03——面試題

目錄 一、mq的作用和使用場景 二、mq的優點 2.1架構設計優勢 2.2功能特性優勢 2.3性能與可靠性優勢 2.4生態系統優勢 2.5對比優勢 三、mq的缺點 3.1性能與擴展性限制 3.2功能局限性 3.3運維復雜度 3.4與其他消息隊列的對比劣勢 四、mq相關產品&#xff0c;每種產品…

應用層攻防啟示錄:HTTP/HTTPS攻擊的精準攔截之道

一、七層攻擊的復雜性 # CC攻擊模擬工具&#xff08;Python實現&#xff09; import requests import threadingtarget_url "https://example.com/search?q"def cc_attack():while True:# 構造惡意搜索請求malicious_query "0" * 1000 # 長查詢參數try…

.net 警告【代碼 CS1998】此異步方法缺少 “await“ 運算符,將以同步方式運行。

【代碼 CS1998】此異步方法缺少 “await” 運算符&#xff0c;將以同步方式運行。請考慮使用 “await” 運算符等待非阻止的 API 調用&#xff0c;或者使用 “await Task.Run(…)” 在后臺線程上執行占用大量 CPU 的工作。在 VS 2022 中遇到的 CS1998 編譯器警告&#xff0c;表…

【自動駕駛黑科技】基于Frenet坐標系的車道變換軌跡規劃系統實現(附完整代碼)

1. 代碼結構概覽該代碼實現了一個車道變換軌跡規劃系統&#xff0c;包含兩個核心模塊&#xff1a;道路建模&#xff08;EnhancedRoadModel&#xff09;&#xff1a;基于樣條曲線構建道路模型。軌跡規劃&#xff08;LaneChangePlanner&#xff09;&#xff1a;根據障礙物狀態和道…

uni-calendar自定義簽到打卡顏色

uni-calendar自定義簽到打卡顏色&#xff0c;只需要將打卡的狀態添加到動態類class中即可 效果&#xff1a;在uni-modules >>> components >>> uni-calendar >>> uni-calendar-item.vue文件中&#xff0c;根據info對應的文字或者符號添加不同的clas…

浙江大學PTA程序設計C語言基礎編程練習題1-5

&#x1f30f;個人博客主頁&#xff1a;意疏-CSDN博客 希望文章能夠給到初學的你一些啟發&#xff5e; 如果覺得文章對你有幫助的話&#xff0c;點贊 關注 收藏支持一下筆者吧&#xff5e; 閱讀指南&#xff1a;開篇說明題目一、厘米換算英寸題目二、然后是幾點題目三、 逆序…

catkin build的config設置指南[設置多種make模式或策略]

在本篇文章中&#xff0c;我們來盡可能詳細地深入探討 catkin config 的使用方法。這是掌握 catkin_tools 工作流的關鍵&#xff0c;能極大地提升你的開發效率和項目的規范性。 catkin config 的核心思想 首先&#xff0c;要理解它的核心思想&#xff1a;為你的 Catkin 工作空間…

Ubuntu掛載和取消掛載

在 Ubuntu 中&#xff0c;掛載&#xff08;Mount&#xff09;和取消掛載&#xff08;Unmount&#xff09;是管理存儲設備&#xff08;如硬盤、U盤、ISO鏡像等&#xff09;的常見操作。以下是詳細指南&#xff1a;1. 掛載&#xff08;Mount&#xff09; 1.1 查看可用存儲設備 ls…

Vue開發常用庫(含npm安裝命令)

Vue開發常用庫&#xff08;含npm安裝命令&#xff09; 核心生態系統&#xff1a;Vue Router - 官方路由管理器 npm install vue-router4 # Vue 3 npm install vue-router3 # Vue 2Pinia - 新一代狀態管理庫 npm install piniaVuex - 傳統狀態管理庫 npm install vuexnext …

[硬件電路-39]:激光光路的光信號處理、模擬電路的電信號處理、數字電路的電信號處理、軟件的信號處理,有哪些共通的操作、運算、變換?

激光光路、模擬電路、數字電路及軟件中的信號處理在操作、運算和變換層面存在顯著共性&#xff0c;這些共性體現了信號處理的核心邏輯在不同技術領域的通用性。以下是具體分析&#xff1a; 目錄 一、共通操作&#xff1a;信號處理的基礎動作 1、放大與衰減 2、濾波 3、調制…

Grails(Groovy)框架拋出NoHandlerFoundException而不是返回404 Not Found

本文記錄在基于Spring(Boot)框架&#xff08;使用Java語言&#xff09;和Grails框架&#xff08;使用Groovy語言&#xff09;下&#xff0c;開發Controller接口&#xff0c;對不存在的URL請求&#xff0c;接口返回404 not found&#xff0c;而不是拋出NoHandlerFoundException異…