C、C++、C#的区别概述

news2024/11/27 20:38:20

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.coloradmin.cn/o/1291518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于DWC OTG2.0中PFC的理解

在DWC OTG2.0 Controller手册中,有一章节专门介绍了PFC,Packet FIFO Controller。其内部分为共享FIFO(shared FIFO)以及专用FIFO(Dedicated FIFO),并针对dev和host两种模式,并且还要…

IT行业软件数据文件传输安全与高效是如何保障的?

在当今迅速发展的科技世界中,云计算、大数据、移动互联网等信息技术正迎来蓬勃发展,IT行业正置身于一个全新的世界。数据不仅是最重要的资产,也是企业竞争力的核心所在。然而,如何缩短信息共享时间、高速流转数据、跨部门/跨区域协…

智能优化算法应用:基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鹰栖息算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹰栖息算法4.实验参数设定5.算法结果6.参考文献7.…

Linux--文件权限与shell外壳的理解

目录 一.Linux的用户与用户切换,提权 二.对文件权限的理解 1.文件权限角色的权限文件属性 2.Linux中的三种角色 3.为什么会存在所属组这个角色 4.文件属性的意义 4.1.第一个字母的意义 4.2 第2——第10个字母的意义 4.3修改文件权限的方法 三.目录权限 四…

记录 | linux手动清理 buff/cache

linux下手动清理 buff/cache 切换到 root 权限 # 这个drop_caches文件可以设置的值分别为1、2、3 echo 1 > /proc/sys/vm/drop_caches # 表示清除pagecache echo 2 > /proc/sys/vm/drop_caches # 表示清除回收slab分配器中的对象(包括目录项缓存和inode缓…

idea报错——Access denied for user ‘root‘@‘localhost‘ (using password: YES)

项目场景: 使用idea启动SpringBoot项目报错,可以根据提示看到是数据库的原因,显示使用了密码,具体报错信息如下: 解决方案: 第一步:先去配置文件里面查看连接MySQL的url是否正确,如果…

代码随想录算法训练营第四十二天 _ 动态规划_01背包问题、416.分割等和子集。

学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 二维数组处理01背包问题 听起来…

Node.js快速搭建简单的HTTP服务器并发布公网远程访问

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

基于ssm校园美食交流系统论文

目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10…

CentOS 7.9 安装 k8s(详细教程)

文章目录 安装步骤安装前准备事项安装docker准备环境安装kubelet、kubeadm、kubectl初始化master节点安装网络插件calicowork 加入集群 k8s集群测试 安装步骤 安装前准备事项 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM&#xff0…

order排序方式研究

请直接看原文: 链接:https://juejin.cn/post/7258182427306197051 --------------------------------------------------------------------------------------------------------------------------------- 一.前言 在MySQL世界中,排序是一个常见而重…

了解linux网络时间服务器

本章主要介绍网络时间服务器。 使用chrony配置时间服务器 配置chrony客户端向服务器同步时间 20.1 时间同步的必要性 些服务对时间要求非常严格,例如,图20-1所示的由三台服务器搭建的ceph集群。 这三台服务器的时间必须保持一致,如果不一致…

10 单词接龙

题目描述 单词接龙的规则是: 可用于接龙的单词首字母必须要前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。 现给定一组全部由小写字母组成…

【开发技能】-解决visio交叉线(跨线)交叉点弯曲问题

问题 平时工作中使用visio作图时,经常会遇到交叉线在相交时会形成一个弯曲弓形,这十分影响视图效果。可以采用下面的方法消除弓形。 方法 第一步:菜单栏--设计---连接线 第二步:选中这条交叉线---点击显示跨线 最终问题得到解决…

C#图像处理OpenCV开发指南(CVStar,09)——边缘识别之Scharr算法的实例代码

1 边缘识别之Scharr算法 算法文章很多,不再论述。 1.1 函数原型 void Cv2.Scharr(src,dst,ddepth,dx,dy,scale,delta,borderType) 1.2 参数说明 src 代表原始图像。dst 代表目标图像。ddepth 代表输出图像的深度。CV_16Sdx 代表x方向上的求导阶数…

23款奔驰E350eL升级小柏林音响 13个扬声器 590w

小柏林之声音响是13个喇叭1个功放,功率是590W,对应普通音响来说,已经是上等了。像著名的哈曼卡顿音响,还是丹拿音响,或者是BOSE音响,论地位,论音质柏林之声也是名列前茅。 升级小柏林音响&#…

java多人聊天

服务端 package 多人聊天;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList;…

qt 5.15.2 主窗体菜单工具栏树控件功能

qt 5.15.2 主窗体菜单工具栏树控件功能 显示主窗体效果&#xff1a; mainwindow.h文件内容&#xff1a; #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QFileDialog> #include <QString> #include <QMessageBox>#inc…

深入理解Sentinel系列-2.Sentinel原理及核心源码分析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…

CAP理论详解

引言 随着分布式系统在现代应用中的广泛应用&#xff0c;工程师们不得不面对诸如数据一致性、可用性和分区容错性等问题。CAP定理作为分布式系统设计的基石之一&#xff0c;为我们提供了在这些问题之间做出权衡的理论依据。本文将深入探讨CAP定理的技术细节、先进性&#xff0…