C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。
1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。并且他用B语言写了第一个UNIX操作系统。
1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
C语言非常简洁,只有32个关键字,9种控制语句,34种运算符。
具体来说,C语言是一个结构化语言,重点在于数据结构和算法的实现。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。
C语言可以做任何用处,但最大的用处还是写写操作系统和编译器之类的。
C 语言是非常有效率的,很多时候你都需要考虑内存的管理等底层的东西。很可惜这些都需要你去花很多的时间去做。作为一种底层编程语言,可以通过指针进行很直接的内存管理,另外,很多语言都是用 C 来设计的, 比如 perl , java, python。
C语言是一种通用性的编程语言,它既具有高级语言的特点,又具有汇编语言的特点。,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。尽管C语言是为实现操作系统软件而设计的,但它也广泛的应用于开发便携式应用软件。
代码:
#include <stdio.h> int main(void) { printf("hello, world!n"); return 0; }
20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。
由此可见,C++是C的继续和发展。C++功能强大,可以因应开发大型应用软件。即可以面向对象,也可以兼容C,可以面向过程。
C++是一种复杂、难以掌握的语言,不仅体现在其语法,更体现在其提供了4种编程思维模型上面,包括:procedural-based, object-based, object-oriented, generic paradigm。由此C++是既有效率,又有弹性;既可以面向对象,又兼容面向过程。
面向过程的思路:分析解决问题所需的步骤,用函数把这些步骤依次实现。
面向对象的思路:把构成问题的事务分解为各个对象,建立对象的目的,不是完成一个步骤,而是描述某个事务在解决整个问题步骤中的行为。
从上述描述可以看出,其实面向对象和面向过程是两种思考解决问题的方式,其差异主要在于思考的角度。
C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
C++是最流行的编程语言之一,它的应用领域涵盖了系统软件、应用软件、驱动程序、嵌入式软件、高性能的服务器与客户端应用程序和诸如电视游戏等娱乐软件。
代码:
#include <iostream> int main() { std::cout << "Hello, world!n"; }
C语言是面向过程的编程,它最重要的特点是函数,通过main函数来调用各个子函数。程序运行的顺序都是程序员事先决定好的。
C++是面向对象的编程,类产它的主要特点,在程序执行过程中,先由主main函数进入,定义一些类,根据需要执行类的成员函数,过程的概念被淡化了(实际上过程还是有的,就是主函数的哪些语句),以类驱动程序运行,类就是对象,所以我们称之为面向对象程序设计。面向对象在分析和解决问题的时候,将涉及到的数据和数据的操作封装在类中,通过类可以创建对象,以事件或消息来驱动对象执行处理。
C语言和C++的最大区别在于它们解决问题的思想方法不一样。C语言主要用于嵌入式领域,驱动开发等与硬件直接打交道的领域, C++可以用于应用层开发,用户界面开发等于操作系统打交道的领域。
C++对C的“增强”,表现在以下几个方面:
类型检查更为严格。
增加了面向对象的机制。
增加了泛型编程的机制(Template)。
增加了异常处理。
增加了运算符重载。
增加了标准模板库(STL)。
增加了命名空间,避免全局命名冲突。
C++既继承了C强大的底层操作特性,又被赋予了教科书式的面向对象机制。它特性繁多,有其他面向对象语言鲜见的多继承,有耐人寻味的对值传递与引用传递入木三分的区分以及const关键字,等等。C++就像是一把瑞士军刀,或者像是一个工具箱,它为你提供尽可能多的工具,多到让不熟悉它的人无所适从,让懂得如何使用它的人如鱼得水。C++的种种特性使得它非常适合用来编写底层数据结构,算法,库等,是系统软件开发以及数学模型构建等的强大武器库,被誉为工业级编程语言。C的大部分代码在C++上都能应用,而C++的代码在C上不能应用。(记住是大部分,不是所有)
与C不兼容之处
上面说了C的大部分代码在C++上都能run的溜溜的,但是也有少数C代码会在C++中失效,或者在C++中有不同的行为。例如:隐式转换。
1) 最常见的差异之一是,C允许从void*隐式转换到其它的指针类型,但C++不允许。下列是有效的C代码:
//从void*类型隐式转换为int*类型
int *i=malloc(sizeof(int)*5);
但要使其在C和C++两者皆能运作,就需要使用显式转换:
int *i=(int*)malloc(sizeof(int)*5);
2) 在C中,多次声明一个全局变量虽然不可取,但不算错。在C++中,多次声明同一个全局变量会引发错误。
3) 另一个常见的可移植问题是,C++定义了新关键字,例如如new,class,它们在C程序中可以作为识别字(例:变量名)的。
在C标准(C99)中去除了一些不兼容之处,也支持了一些C++的特性,如//注解,以及在代码中混合声明。不过C99也纳入几个和C++冲突的新特性(如:可变长度数组、原生复数类型和复合逐字常数)。
4) 若要混用C和C++的代码,则所有在C++中调用的C代码,必须放在 extern "C" { /* C代码 */ } 内。
在你使用过程中遇到的问题可能比这里讲的要多,没关系,你只要记住没有一个程序员不是从问题堆里走出来的就行了。
讲了这么多,是不是对C和C++有了更深刻的了解。两者各有长处,各有缺点,其实就看你在哪个领域去用它。
评论
C没有对象,C++有对象,但有了对象却很伤人脑筋,就像人一样,单身一人时,想怎么玩就怎么玩,一旦有了对象往往就会受到各种各样的束缚,失去一部分自由,C语言就那么点语法,简洁高效用起来无拘无束,但什么都得自己动手去做,C++比C有出息找了个对象,很多事情不用自己动手对象就可以替你做,但也正因如此处处受到对象的约束,运行中也更容易出bug……
从C 到 C++ 的一些建议
1 慎用宏
#define PAI 3.14
==>
const double PAI = 3.14
#define ERROR 0
#define SUCCESS 1
==>
enum STATE{ERROR,SUCCESS}
#define max(a,b)((a)>(b)?(a):(b))
==>
inline int max(int a,int b){
return a > b ? a:b;
}
2 变量随用随声明同时初始化
3 尽量使用 new/delete 取代 malloc/free
4 少用 void*,指针计算、联合体和强制类型转换
5 少用 c 风格的 char*,多用 string 表示字符串