首页 > 编程语言 >C#、C++和C的不同之处

C#、C++和C的不同之处

时间:2024-07-02 09:32:08浏览次数:1  
标签:编程语言 C# 代码 C++ C语言 NET 不同之处

目录


什么是C语言?

我们先从C语言(C programming language)开始,因为它是三种语言中资格最老、使用最广的一种。丹尼斯·里奇(Dennis Ritchie)于1972年发明了它,然后于1978年出版。里奇最开始的设计初衷是想要开发新版本的Unix系统。

在此之前,Unix操作系统用的是汇编语言(assembly language),这是计算机可读的最底层的编程语言。C的发明彻底改变了编程和操作系统。至于那些剩下的,正如他们所说,都成为历史了。

C仍然是一种底层编程语言,其执行效率几乎与汇编代码一样高。它提供最基本的对内存的访问,并且只要很少的运行时支持。

尽管C语言早在40年前就已被发布,但它仍然是有史以来使用最广泛的编程语言。程序员们仍然在操作系统、内核级软件开发、硬件驱动程序和需要用上旧代码的应用程序里使用它。

大多数老派的程序员都认为C是最好的编程语言,因为许多新的语言都是以C为基础的。由于其年代久远,这反倒使得C也可以提供一些安全保障。使用它的人数相比较少,因而它更不容易成为黑客的攻击目标。


什么是C++?

C++是作为C语言的扩展而开发的。它是由丹麦一位名叫本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)的博士生创建的。他的目标是:在不牺牲速度和效率的情况下,扩展C语言并,添加面向对象(object-oriented)的编程功能。

一般认为C++是一种中级的编程语言,因为它建立在底层的C语言的基础上,但有更高级的功能。

自1985年C++首次发布以来,它已成为另一种极其高产的编程语言。它与C一起用于操作系统的开发,但在那些赫赫有名的服务器和PC软件也能见到它的身影。

如果你已在C语言上有了坚实的基础,那么理解C++就容易多了;然而,如果你想直接进入面向对象编程,你仍然可以把C++作为你的第一语言。

(注:想要了解C++的历史,可以看BS的著作《The Design and Evolution of C++》)


什么是C#?

C#(发音是“C Sharp”)是一种高级的、面向对象的编程语言,同样也是作为C语言的扩展而创建的。2002年,安德斯·海尔斯伯格(Anders Hejlsberg)带领的微软(Microsoft)团队开发了C#。它基于.NET框架,但它的主干仍然是C语言。

C#会将代码编译成字节码(byte-code),而不是机器码。这意味着它在可以在虚拟机上运行,并且会被动态转换为机器码。它为基础C代码添加了垃圾回收(garbage collection)、对未初始化变量的检查、边界检查和类型检查等功能。

C#通常用于内部或企业应用程序,而不是商业软件。你可以在.NET框架中的客户端和服务器端开发中找到它。

(注:除此之外,Unity引擎也使得C#在游戏业蓬勃发展了)

虽然C#是这三种语言中技术上最复杂的,但相比C或C++而言,C#更不容易出错,而且学起来也相对快一些。


主要不同


C与C++

要想完全理解C和C++之间的区别,你先得了解什么是“面向对象编程(object-oriented programming, OOP)”。“面向对象”这个术语起源于50年代末或60年代初的麻省理工学院,面向对象编程(或OOP)使用一个称为“对象”的概念。对象是“类(class)”或程序代码模板(template)的实例。类可以由数据或代码的“例程(procedures)”(也称为方法(methods))组成。

C语言不是面向对象的,这是两者之间最显著的区别。C是所谓的“过程式”的编程语言,而C++是个混血,它既可以是过程式的,也可以是面向对象的。

除此之外,C和C++之间还有其他关键的区别:

  • C++是作为C的扩展而创建的,这意味着它可以运行大多数C代码。但反过来,C可不能运行C++代码。
    (注:严格来说,C 不是 C++ 的子集。虽然大多数(风格良好的)C语言程序也可以作为C++语言,但有些C程序不是正确的C++,甚至有几种编程的方式在 C 和 C++ 中具有不同的含义。但是 C++ 支持所有C 支持的编程技术。随着C和C++的各自独立的发展,它们已成为兄弟而非父子了:-)
  • 作为一种面向对象的语言,C++支持封装(encapsulation)、继承(inheritance)和多态(polymorphism),而C不支持。
  • 在C语言中,数据和函数是一种“自由的主体”,也就是说,你可以使用外部的代码来操作它们。而C++可以将数据和函数封装在一个对象中,所以这些数据结构和运算符对外部代码来说是隐藏的。
  • C++使用名称空间(namespace),将相同逻辑的代码组织到一起中,以防止名称冲突。这是因为当代码库包含多个库时,可能会发生名称冲突。C不使用命名空间。
  • C使用函数来实现输入和输出,而C++使用对象来实现输入和输出。
  • C++支持引用(reference)变量,而C不支持。变量的引用是一个已经存在的变量的别名,其实就是创建了一个简短的符号(而指涉同一变量),以加快编程速度。
  • C不提供错误或异常处理,但C++提供。

C++与C#

作为一种现代得多的编程语言,C#的设计使其于客户端和基于web的应用程序中,与当前的http://Microsoft.NET框架一起工作。

虽然C++是一种面向对象的语言,但C#被认为是一种基于组件(component)的编程语言。面向对象编程专注于类之间的关联,这些类链接在一起,形成一个大的二进制可执行文件,而面向组件编程使用可交换的代码模块,这些代码模块独立工作,不需要知道内部细节就可以使用。

下面是C++和C#之间的一些其他主要区别。

  • C++编译成机器代码,而C#编译成CLR(注:Common Language Runtime,一种.NET框架的虚拟机组件),由http://ASP.NET解析。
  • C++会要求手动回收内存,但C#在虚拟机中运行,它可以自动处理内存管理的事情。
  • C#不使用指针,而C++可以在任何地方使用指针。(注:C#事实上在有限范围内支持指针,即所谓unsafe的代码。)
  • C++可以在任何平台上使用,尽管它设计之初是基于Unix的系统。C#虽已标准化,但很少在Windows环境之外使用。(注:现在.NET和C#都能够跨平台了。)
  • C++可以创建独立的、或是控制台应用程序。C#可以创建控制台、Windows、http://ASP.NET和移动应用程序,但无法创建独立的应用程序。

C与C#

虽然C和C#在技术上有关,但它们是极为不同的语言,异大于同。有C语言背景对学习C#很有用,因为它们有些语法是相似的;然而,C#的语法十分宽容,以至于你可以在完全不懂C的情况下也能轻松学习它。


理解C#、C++和C的不同之处

标签:编程语言,C#,代码,C++,C语言,NET,不同之处
From: https://www.cnblogs.com/yubo-guan/p/18279268

相关文章

  • C++中的cerr和clog
    标准错误流(cerr)预定义的对象cerr是iostream类的一个实例。cerr对象附属到标准错误设备,通常也是显示屏,但是cerr对象是非缓冲的,且每个流插入到cerr都会立即输出。cerr也是与流插入运算符<<结合使用的,如下所示:和cout用法一样不过区别就在是否缓冲的问题。cerr是不缓冲的有什么......
  • 运营商如何通过PCDN技术提高用户服务?
    着互联网的快速发展,用户对网络速度和质量的要求越来越高。为了满足这些需求,内容分发网络(CDN)成为了关键的基础设施。而在CDN技术中,PCDN(PersonalCDN)作为一种新兴的技术,为运营商和用户提供了新的解决方案。本文将重点介绍PCDN技术及其在运营商侧的接入方式。一、PCDN技术概述......
  • 阿里云 facechanin 人像写真大模型 API 实践
    文章目录前言开通模型定制文件管理服务人物图像检测(非必须)人物形象训练人物写真生成预设模板生成自定义模板生成总结前言在之前的文章中实践了阿里云的文字转语音大模型,感觉还是挺有意思的,效果也挺不错的,感兴趣的可以看下阿里云CosyVoice语音合成大模型API实践,......
  • RocketMQ 基础教程-高级功能汇总
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • RocketMQ 基础教程-RocketMQ整合SpringBoot
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版
    VMwareESXi8.0U3macOSUnlocker&OEMBIOS集成网卡驱动MarvellAQC网卡定制版VMwareESXi8.0U3macOSUnlocker&OEMBIOS集成网卡驱动和NVMe驱动(集成驱动版)发布ESXi8.0U3集成驱动版,在个人电脑上运行企业级工作负载请访问原文链接:https://sysin.org/bl......
  • CH5XX串口中断接收超时
    1.串口1初始化:/*配置串口1:先配置IO口模式,再配置串口*/GPIOA_SetBits(GPIO_Pin_9);GPIOA_ModeCfg(GPIO_Pin_8,GPIO_ModeIN_PU);//RXD-配置上拉输入GPIOA_ModeCfg(GPIO_Pin_9,GPIO_ModeOut_PP_5mA);//TXD-配置推挽输出,注意先让IO口输出高电平U......
  • VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS HPE (慧与) 定制版
    VMwareESXi8.0U3macOSUnlocker&OEMBIOSHPE(慧与)定制版ESXi8.0U3标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)、Huawei(华为)、xFusion(超聚变)OEM定制版请访问原文链接:https://......
  • ros slam microros之H电桥电机驱动原理介绍
    一、电机驱动原理介绍正式编写代码前,我们先了解下电机驱动的原理,以便于我们了解我们如何才能通过代码控制电机的转速和正反转。1.1H桥电路让电机动起来只需要通电就行,比如我们用的额定电压为12V130RPM的电机,当给到12V的电压时可以达到额定转速130转/分,但如果我们给8V的电压,此时......
  • SpringMVC中执行流程
    目录14、SpringMVC执行流程14.1、SpringMVC常用组件14.2、DispatcherServlet初始化过程①初始化WebApplicationContext②创建WebApplicationContext③DispatcherServlet初始化策略14.3、DispatcherServlet调用组件处理请求①processRequest()②doService()③doDispatch()④process......