C、C++、C#的區別概述

C、C++、C#的區別概述

https://link.zhihu.com/?target=https%3A//csharp-station.com/understanding-the-differences-between-c-c-and-c/文章翻譯源于此鏈接

img

01、C語言

? Dennis Ritchie在1972年創造了C語言并在1978年公布。Ritchie設計C的初衷是用于開發新版本的Unix。在那之前,Unix使用的是匯編語言(assembly language),它是計算機可讀取的最低級的編程。C語言的誕生徹底改變(revolutionize)了編程和操作系統。其余的,正如他們所說,是一段歷史了。

  • C也是一門低級的編程語言,它的效率和匯編接近
  • 它提供了基本級(base-level)的訪問內存方式,對運行時支持的要求非常小。
  • 由于C的年齡原因,使用C可能帶來一些安全性的提升(用戶少、黑客攻擊可能性小)

開發人員仍然使用它在操作系統、內核級軟件開發、硬件驅動和需要與舊代碼一同工作的應用程序上。(看TIOBE就知道了,2019年12月排名第二,僅次于Java)

02、C++

? C++可以說是C的擴展版本,它是由丹麥的哲學博士(Ph.D.)Bjarne Stroustrup開發的。他的目標是增強C語言并在不犧牲速度和效率的前提下為其增加面向對象(object-oriented)的能力。

  • C++被認為是一種中級的語言,因為它基于低級的C語言所創建并擁有一些高級的能力
  • 同時C++成為了另一個高產的編程語言。在開發操作系統時它會和C一同協作,在一些高端服務器和PC軟件上也有應用
  • C++ 可以編寫跨平臺的程序,并且在許多領域,如游戲開發、系統編程等方面有廣泛應用(比如大家熟知的王者榮耀就用到了C++)

03、C#

? C#是一門高級面向對象的編程語言,同樣也是作為C的擴展所創建的。它是在2002年,由微軟的一個團隊的領頭人Anders Hejlsberg開發的。它是基于**.NET框架**的,但是它的核心依然是C語言。

  • C#將代碼編譯成字節碼(byte-code)而不是機器碼(0101的二進制)。
  • 它會在一臺虛擬計算機上運行,這臺虛擬機實時(on the fly)將字節碼翻譯成機器碼
  • 在C語言的基礎上添加了垃圾回收(garbage collection)、未初始化的變量檢查(uninitialized variable checking)、邊界檢查(bound checking)和類型檢查(type checking)這些特性。

? 講到這里,C#有一些特性跟Java相像,以及JVM原理等等

C#常見于內部或者企業應用而不是商業軟件。可以在.NET框架中的客戶端和服務器端開發中找到。

區別總結

C、C++ 和 C# 是三種不同的編程語言,它們在設計目標特性應用領域上有很大的區別。以下是它們的比較:

  1. 編程范式:
    • C: C 是一門過程式編程語言,主要關注過程和函數的編寫。
    • C++: C++ 是一門多范式編程語言,支持過程式編程面向對象編程。它引入了類和對象的概念,允許使用封裝、繼承和多態等面向對象的特性。
    • C#: C# 是一門多范式編程語言,主要面向對象,同時也支持過程式和泛型編程。它設計用于與.NET框架交互,支持面向組件編程
  2. 內存管理:
    • C: 在 C 中,開發者需要手動管理內存,包括分配和釋放內存。
    • C++: C++ 提供了自動內存管理的功能,但仍然允許使用手動管理內存的方式。它引入了構造函數和析構函數來管理對象的生命周期。
    • C#: C# 運行在.NET框架上,具有垃圾回收機制自動管理內存。開發者無需手動分配或釋放內存。
  3. 平臺兼容性:
    • C: C 的代碼通常具有較好的平臺兼容性,可以在多個操作系統上編譯和運行
    • C++: C++ 的代碼也具有一定的平臺兼容性,但在涉及圖形用戶界面 (GUI) 等方面可能需要特定的調整。
    • C#: C# 主要與.NET框架密切相關,因此在 Windows 環境中更為常見。雖然通過Mono和.NET Core可以實現在其他平臺上的運行,但主要還是以Windows 為主
  4. 編譯與執行方式:
    • C: C 代碼通常被編譯成機器碼,直接在硬件上執行。
    • C++: C++ 代碼也被編譯成機器碼,但引入了面向對象的概念,允許生成類和對象的相關結構。
    • C#: C# 代碼被編譯成中間語言 (IL),然后在.NET運行時環境中執行。這種方式允許跨平臺運行,并在運行時進行一些優化。
  5. 應用領域:
    • C: C 通常用于系統級編程、嵌入式系統和對性能要求較高的應用程序。
    • C++: C++廣泛應用于游戲開發、圖形界面應用程序、系統開發以及需要高性能的應用領域。
    • C#: C# 常用于Windows桌面應用程序、Web應用程序、移動應用程序以及與.NET平臺集成的企業級應用。

總體而言,選擇使用哪種語言取決于項目的需求、開發者的經驗以及應用程序的特性。 C 適用于底層開發,C++ 提供了更多的抽象和面向對象的特性,而 C# 則適用于.NET平臺上的高級應用開發。

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

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

相關文章

express框架使用

一、express介紹 express 是一個基于 Node.js 平臺的極簡、靈活的 WEB 應用開發框架,簡單來說,express 是一個封裝好的工具包,封裝了很多功能,便于我們開發 WEB 應用(HTTP 服務) 二、express 使用 2.1 e…

【組合數學】遞推關系

目錄 1. 遞推關系建立2. 常系數齊次遞推關系的求解3. 常系數非齊次遞推關系的求解4. 迭代法 1. 遞推關系建立 給定一個數的序列 f ( 0 ) , f ( 1 ) , . . . , f ( n ) , . . . , f (0), f(1), ..., f(n ),... , f(0),f(1),...,f(n),..., 若存在整數 n 0 n_0 n0? &#xff…

datav-實現輪播表,使用updateRows方法-無縫銜接加載數據

前言 最近在做大屏需求的時候,遇到一個輪播數據的需求,查看datav文檔發現確實有這個組件 但這個組件只提供了一次加載輪播的例子,雖然提供了輪播加載數據updateRows方法 但是文檔并沒有觸發事件,比如輪播完數據觸發事件&#xf…

ESL電子標簽的真相:電子墨水屏沒墨水?

一說到電子墨水屏 你大概率會想到Kindle 如果你問是不是墨水做的 那這篇文章你就得好好看看了 在我們日常與客戶的溝通中 為數不多卻出乎意料地有好幾個以下對話↓ 在此辟謠 電子墨水屏里確實 沒 有 墨 水 那它是什么樣的原理?為什么越來越多顯示設備采用&…

Abp vNext在Docker部署并導出鏡像

Docker介紹 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的 Linux或Windows操作系統的機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何…

深度剖析中國居民消費價格指數CPI數據可視化案例-Python可視化技術實現(附完整源碼)【數據可視化項目案例-16】

?????? 你的技術旅程將在這里啟航! ???? 本專欄包括所有的可視化技術學習,感興趣可以到本專欄頁面,查閱可視化寶典可快速了解本專欄。訂閱專欄用戶可以在每篇文章底部下載對應案例源碼以供大家深入的學習研究。 ?? 每一個案例都會提供完整代碼和詳細的講解,不論…

Win11在Virtualbox上安裝ubuntu操作系統

注:原創筆記,以下圖片水印為本人 相關工具展示 第四個:ubuntu的vmdk文件,用于配置虛擬機 第5/6個:virtualbox安裝包 一、安裝 VirtualBox 由于win11版本問題,如果裝不了 virtualBox需要在官網安裝最新版…

新零售模式:跨境電商如何實現線上線下融合?

隨著數字時代的發展,新零售模式逐漸嶄露頭角,成為跨境電商發展的重要趨勢。線上線下融合不僅拓寬了銷售渠道,更提供了更豐富、更便捷的購物體驗。 本文將深入探討新零售模式在跨境電商中的應用,以及如何實現線上線下融合&#xf…

前后端請求之nginx配置

問題: 前端發送的請求,是如何請求到后端服務器的? 如,前端請求地址:http://loclhost/api/employee/login: 后端相應請求地址:http://loclhost:8080/admin/employee/login 回答: …

使用MfgTool燒寫前需準備的文件

一. 簡介 本文我們就來學習,如何將我們編譯的 uboot,zImage(內核鏡像),xxx.dtb設備樹文件,還有制作的根文件系統,這四個文件燒寫到開發板中,最后 開發板能正常啟動。 本文這里使用…

【日志技術】附Logback入門教程

文章目錄 日志概論日志的體系Logback快速入門日志配置文件配置日志級別 日志概論 什么是日志?其實可以通過下面幾個問題來了解的。 系統系統能記住某些數據被誰操作,比如被誰刪除了?想分析用戶瀏覽系統的具體情況,比如挖掘用戶的…

一個簡單的Python自動化測試 logging 日志模塊,為何會難住一個工作6年的測試?

寫Python程序的時候, 我們經常需要寫日志, 以便調試程序,發現問題,以及查看程序的運行狀態。 Python自帶了logging模塊,可以將日志保存到.txt文件中, 也可以輸入到界面上。 我們希望日志有一定的格式, 比…

【性能優化】性能優化實戰

一、背景 在做code review的時候,經常會發現,因為開發習慣問題,很多研發人員喜歡在for循環中查詢數據庫。今天用一個真實例子,記錄一次查詢性能優化的例子 二、示例 代碼如下: classmethod fn_performance() def get_task_ins…

Linux常用調試工具gdb

程序編譯后,調試是十分重要的環節,如何更好更快的定位程序中的問題, 是加快程序開發進度的重要因素。Gdb 調試器是一款 GNU 開發組織并發布的 UNIX/Linux 下的程序調試工 具。GDB調試 編譯要點 對代碼進行編譯,注意一定要加上選項…

【C語言】【數據結構】自定義類型:結構體

引言 這是一篇對結構體的詳細介紹,這篇文章對結構體聲明、結構體的自引用、結構體的初始化、結構體的內存分布和對齊規則、庫函數offsetof、以及進行內存對齊的原因、如何修改默認對齊數、結構體傳參進行介紹和說明。 ? 豬巴戒:個人主頁? 所屬專欄&am…

Ubuntu——永久掛載/卸載硬盤

Ubuntu——永久掛載/卸載硬盤 一、掛載1. 查詢硬盤2. 格式化硬盤3. 掛載硬盤4. 開機自動掛載5. 查看掛載是否成功 二、取消掛載參考資料: 一、掛載 1. 查詢硬盤 sudo fdisk -l2. 格式化硬盤 # 格式化硬盤(/dev/sda)的文件系統,這里格式化為 ext4 系統…

面試經典150題(3-4)

leetcode 150道題 計劃花兩個月時候刷完,今天(第二天)完成了兩道(3-4)150: (26. 刪除有序數組中的重復項) 題目描述: 給你一個 非嚴格遞增排列 的數組 nums ,請你 原地 刪除重復出現的元素,使…

C#生成Token字符串

Token字符串來保證數據安全性,如身份驗證、跨域訪問等。但是由于Token字符串的長度比較長,可能會占用過多的空間和帶寬資源,因此我們需要生成短的Token字符串 方法一:使用Base64編碼 Base64編碼是一種常用的編碼方式&#xff0c…

測試:接口參數測試

接口參數測試是接口測試中非常重要的一部分,主要是為了驗證接口在不同參數輸入下的行為和響應。下面詳細介紹一下接口參數測試的相關內容: 參數必填與非必填測試:需要測試接口對必填參數和非必填參數的處理。對于必填參數,不提供…

【學習筆記】LLM for Education

ChatGPT has entered the classroom: how LLMs could transform education 前言IntroductionThe risks are realEmbracing LLMsIntroducing the AI tutorAugmenting retrievalWill it catch on?總結 前言 一篇來自Nature的文章,探討了教育行業的不同參與者&#x…