C語言和C++到底有什么關系?

C++ 讀作“C 加加”,是“C Plus Plus”的簡稱。

顧名思義,C++ 就是在 C 語言的基礎上增加了新特性,玩出了新花樣,所以才說“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的關系。

C 語言是 1972 年由美國貝爾實驗室開發成功的,在當時算是高級語言,它的很多新特性都讓匯編程序員羨慕不已,就像今天的 Go 語言,剛出生就受到追捧。C 語言也是“時髦”的語言,后來的很多軟件都用 C 語言開發,包括 Windows、Linux、Mac OS、MySQL、Python 等。

但是隨著計算機性能的飛速提高,硬件配置與幾十年前已有天壤之別,軟件規模也不斷增大,很多軟件的體積都超過 1G,例如 PhotoShop、Visual Studio 等,用 C 語言開發這些軟件就顯得非常吃力了,這時候 C++ 就應運而生了。

C++ 主要在 C 語言的基礎上增加了面向對象和泛型的機制,提高了開發效率,以適用于大中型軟件的編寫。

C 和 C++的血緣關系

早期并沒有“C++”這個名字,而是叫做“帶類的 C”。“帶類的 C”是作為 C 語言的一個擴展和補充出現的,目的是提高開發效率,如果你有 Java Web 開發經驗,那么你可以將它們的關系與 Servlet 和 JSP 的關系類比。

這個時期的 C++ 非常粗糙,僅支持簡單的面向對象編程,也沒有自己的編譯器,而是通過一個預處理程序(名字叫 cfront),先將 C++ 代碼“翻譯”為 C 語言代碼,再通過 C 語言編譯器合成最終的程序。

隨著 C++的流行,它的語法也越來越強大,已經能夠很完善的支持面向對象編程和泛型編程。但是一直也沒有誕生出新的 C++ 編譯器,而是對原來 C 編譯器不斷擴展,讓它支持 C++ 的新特性,所以我們通常稱為 C/C++ 編譯器,因為它同時支持 C 和 C++,例如 Windows 下的微軟編譯器(cl.exe),Linux 下的 GCC 編譯器。

也就是說,你寫的 C、C++ 代碼都會通過一個編譯器來編譯,很難說 C++ 是一門獨立的語言,還是對 C 的擴展。

C++和C語言的關系

圖:C++ 和C語言的關系

C語言和C++的學習順序

C++ 語法繁雜,是最惡心的編程語言,沒有之一。如果針對沒有任何編程經驗的讀者寫一本 C++ 的書,那將是一項不小的任務,寫出來的書也會非常厚。即使這樣,也僅僅是在講語法。

更重要的是,這些知識你很難全部吸收,會嚴重打擊你的信心,失去學習的興趣。

沒有任何編程基礎的讀者,我建議先從 C 語言學起,不要貪多嚼不爛。有編程基礎的讀者,相信你自己能做出正確的判斷。

學習編程是一個循序漸進的過程,不要期望一口吃個胖子。學習 C 語言,一來是學習它的語法,為 C++ 打基礎,同時培養編程興趣,二來是學習內存、編譯和鏈接,弄清編程語言的內在機理。

每個初學者都經歷過這樣的窘境:已經學習了語法,明白了編程語言都有什么,也按照教程敲了不少代碼,但是遇到實際問題就掛了,沒有思路,不知道從何下手。說白了就是只會學不會用。

究其原因,就是實踐少,沒有培養起編程思維!學習知識容易,運用知識難!

等你熟悉了 C 語言,能編寫出上百行的代碼,就對編程有些概念了。這個時候再去了解 C++ 究竟在 C 語言基礎上增加了什么,你就站在了一定的高度。

從“學院派”的角度來說,C++ 支持面向過程編程、面向對象編程和泛型編程,而 C 語言僅支持面向過程編程。就面向過程編程而言,C++ 和 C 幾乎是一樣的,所以學習了 C 語言,也就學習了 C++ 的一半,不需要從頭再來。

結論

C++ 是在 C 語言的基礎上擴展而來的,可以把 C 語言當成 C++ 的一個部分。

我建議先從 C 語言學起,打好基礎了,再繼續學習 C++。反正學習 C 語言就是在學習 C++,怕什么。

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

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

相關文章

PCB畫圖軟件PROTEL99SE學習-05畫出銅箔來

sch設計的是各個器件的電連接。設計的就是各種節點的網絡表關系。不管你器件怎么擺放,好看不好看。都不重要。最終設計電路板是把網絡表中連線的網絡節點都用銅箔實物相連,讓他們導電。 網表導出后我們不用去看他,也不用管他的格式。 我們打開…

helm部署metricbeat

背景 在Elastic Stack 7.5版本之前,系統默認采用內置服務進行監控數據采集(稱為內部收集機制),這種設計存在顯著局限性: 當ES集群崩潰時自帶的節點監控也會隨之崩潰,直到集群恢復前,崩潰期間的…

【菜鳥飛】AI多模態:vsCode下python訪問阿里云通義文生圖API

目標 有很多多模態的AI工具,用的少就用在線圖形化的,需要批量,就嘗試代碼生成,本文嘗試代碼調用多模態AI,阿里通義有免費額度,作為練手應該挺好,如果以后選其他的,技術也是相通的。…

從零實現本地文生圖部署(Stable Diffusion)

1. 依賴安裝 文件打包下載地址(Stable Diffusion) # git : 用于下載源碼 https://git-scm.com/downloads/win # Python 作為基礎編譯環境 https://www.python.org/downloads/ # Nvidia 驅動,用于編譯使用GPU顯卡硬件 https://ww…

緩存監控治理在游戲業務的實踐和探索

作者:來自 vivo 互聯網服務器團隊- Wang Zhi 通過對 Redis 和 Caffeine 的緩存監控快速發現和定位問題降低故障的影響面。 一、緩存監控的背景 游戲業務中存在大量的高頻請求尤其是對熱門游戲而言,而應對高并發場景緩存是一個常見且有效的手段。 游戲業…

WordPress漏洞

一,后臺修改模板拿WebShell 1,安裝好靶場后訪問 2,在如圖所示的位置選擇一個php文件寫入一句話木馬,我們這里選擇在404.php中寫入 3,訪問404.php 二,上傳主題拿WebShell 1,找到如圖所示的頁面…

【Linux系列】實時監控磁盤空間:`watch -n 1 ‘df -h‘` 命令詳解

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

騰訊云大模型知識引擎×DeepSeek:股票分析低代碼應用實踐

項目背景與發展歷程 在金融科技快速發展的今天,股票分析作為投資決策的核心環節,正面臨數據量激增和復雜性提升的挑戰。傳統股票分析依賴人工處理,效率低下且成本高昂,而人工智能(AI)的引入為這一領域帶來…

llama源碼學習·model.py[3]ROPE旋轉位置編碼(4)ROPE的應用

一、源碼注釋 def apply_rotary_emb(xq: torch.Tensor, # 查詢矩陣xk: torch.Tensor, # 鍵矩陣freqs_cis: torch.Tensor, # 旋轉嵌入 ) -> Tuple[torch.Tensor, torch.Tensor]:# 首先將xq和xk張量轉換為浮點數# 然后使用reshape將最后一個維度拆分為兩個維度,每…

dify重磅升級:從0.15.3安全升級1.1.0新手避坑指南

Docker Compose 部署 備份自定義的 docker-compose YAML 文件(可選) cd docker cp docker-compose.yaml docker-compose.yaml.-$(date +%Y-%m-%d-%H-%M).bak從 main 分支獲取最新代碼 git checkout main git pull origin main停止服務,命令,請在 docker 目錄下執行

高性能邊緣計算網關-高算力web組態PLC網關

高性能EG8200Pro邊緣計算算力網關-超強處理能力 樣機申請測試:免費測試超30天(https://www.iotrouter.com/prototype/) 產品主要特點和特色功能 設備概覽與連接能力 設備型號:EG8200P。主要特點: 支持多種工業協議&am…

穩定運行的以MongoDB數據庫為數據源和目標的ETL性能變差時提高性能方法和步驟

在使用 MongoDB 作為數據源和目標的 ETL(提取、轉換、加載)過程中,如果性能變差,可能是由于多種原因導致的。為了提高性能,可以按照以下方法和步驟進行排查和優化: 提高 MongoDB ETL 性能需要從多個方面入手…

Web開發-JS應用原生代碼前端數據加密CryptoJS庫jsencrypt庫代碼混淆

知識點: 1、安全開發-原生JS-數據加密&代碼混淆 2、安全開發-原生JS-數據解密安全案例 一、演示案例-WEB開發-原生JS&第三方庫-數據加密 前端技術JS實現: 1、非加密數據大致流程: 客戶端發送->明文數據傳輸-服務端接受數據->…

【Dive Into Stable Diffusion v3.5】1:開源項目正式發布——深入探索SDv3.5模型全參/LoRA/RLHF訓練

目錄 1 引言2 項目簡介3 快速上手3.1 下載代碼3.2 環境配置3.3 項目結構3.4 下載模型與數據集3.5 運行指令3.6 核心參數說明3.6.1 通用參數3.6.2 優化器/學習率3.6.3 數據相關 4 結語 1 引言 在人工智能和機器學習領域,生成模型的應用越來越廣泛。Stable Diffusion…

Docker Compose部署MantisBT

文章目錄 1.docker-compose-mantisbt.yml2.部署3.配置MantisBT4.登錄5.修改配置5.1 取消修改用戶需要郵箱確認 1.docker-compose-mantisbt.yml version: "3" services:web:image: okainov/mantisbt:latestcontainer_name: mantisbt_webports:- "8989:80"e…

Grokking System Design 系統設計面試問題

《Grokking the System Design Interview》列舉了多個經典的系統設計題目,通常按照 不同的業務場景和技術難點 進行分類。以下是一些常見的分類和題目示例: 1. 社交網絡類 設計 Twitter(支持關注/取關、推文、Feed 流) 設計 Facebook Messenger(即時聊天,支持在線/離線狀…

Android Zygote的進程機制

目錄 ? Android Zygote 進程機制詳解 🚩 一、Zygote 的作用 ?? 二、Zygote 啟動流程 ? 1. init 進程啟動 Zygote ? 2. Zygote 初始化虛擬機與核心類庫 ? 3. Zygote 監聽 Socket ? 4. Zygote fork 創建應用進程 🔥 三、Zygote 與應用進程之…

## DeepSeek寫射擊手機小游戲

DeepSeek寫射擊手機小游戲 提問 根據提的要求,讓DeepSeek整理的需求,進行提問,內容如下: 請生成一個包含以下功能的可運行移動端射擊小游戲H5文件: 要求 可以重新開始游戲 可以暫停游戲 射擊位置在底部中間&#xff…

【智能體】| 知識庫、RAG概念區分以及智能體是什么

文章目錄 前言簡介大模型“幻覺”問題如何解決“幻覺”問題? RAG、智能體、RAG智能體概念什么是檢索增強型生成(RAG)模擬簡單的RAG場景 AI系統中的智能體是什么什么是Agentic RAG?Agentic RAG如何工作?Agentic RAG架構…

Linux與HTTP中的Cookie和Session

HTTP中的Cookie和Session 本篇介紹 前面幾篇已經基本介紹了HTTP協議的大部分內容,但是前面提到了一點「HTTP是無連接、無狀態的協議」,那么到底有什么無連接以及什么是無狀態。基于這兩個問題,隨后解釋什么是Cookie和Session,以…