目录
我们先从C语言(C programming language)开始,因为它是三种语言中资格最老、使用最广的一种。丹尼斯·里奇(Dennis Ritchie)于1972年发明了它,然后于1978年出版。里奇最开始的设计初衷是想要开发新版本的Unix系统。 在此之前,Unix操作系统用的是汇编语言(assembly language),这是计算机可读的最底层的编程语言。C的发明彻底改变了编程和操作系统。至于那些剩下的,正如他们所说,都成为历史了。 C仍然是一种底层编程语言,其执行效率几乎与汇编代码一样高。它提供最基本的对内存的访问,并且只要很少的运行时支持。 尽管C语言早在40年前就已被发布,但它仍然是有史以来使用最广泛的编程语言。程序员们仍然在操作系统、内核级软件开发、硬件驱动程序和需要用上旧代码的应用程序里使用它。 大多数老派的程序员都认为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 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++之间的区别,你先得了解什么是“面向对象编程(object-oriented programming, OOP)”。“面向对象”这个术语起源于50年代末或60年代初的麻省理工学院,面向对象编程(或OOP)使用一个称为“对象”的概念。对象是“类(class)”或程序代码模板(template)的实例。类可以由数据或代码的“例程(procedures)”(也称为方法(methods))组成。 C语言不是面向对象的,这是两者之间最显著的区别。C是所谓的“过程式”的编程语言,而C++是个混血,它既可以是过程式的,也可以是面向对象的。 除此之外,C和C++之间还有其他关键的区别: 作为一种现代得多的编程语言,C#的设计使其于客户端和基于web的应用程序中,与当前的http://Microsoft.NET框架一起工作。 虽然C++是一种面向对象的语言,但C#被认为是一种基于组件(component)的编程语言。面向对象编程专注于类之间的关联,这些类链接在一起,形成一个大的二进制可执行文件,而面向组件编程使用可交换的代码模块,这些代码模块独立工作,不需要知道内部细节就可以使用。 下面是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#