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


什么是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的不同之处

posted @ 2024-07-02 09:19  guanyubo  阅读(51)  评论(0编辑  收藏  举报