浅谈C、C++及其区别、兼容与不兼容

1、闲说C

C语言之因此命名为C,是由于C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。java

1967年,剑桥大学的Martin Richards对CPL语言进行了简化,因而产生了BCPL(Basic Combined Programming Language)语言。而且他用B语言写了第一个UNIX操做系统。python

1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母做为这种语言的名字,这就是C语言。ios

C语言很是简洁,只有32个关键字,9种控制语句,34种运算符。程序员

 

具体来讲,C语言是一个结构化语言,重点在于数据结构和算法的实现。C程序的设计首要考虑的是如何经过一个过程,对输入(或环境条件)进行运算处理获得输出(或实现过程(事物)控制)。算法

C语言能够作任何用处,但最大的用处仍是写写操做系统和编译器之类的。编程

C 语言是很是有效率的,不少时候你都须要考虑内存的管理等底层的东西。很惋惜这些都须要你去花不少的时间去作。做为一种底层编程语言,能够经过指针进行很直接的内存管理,另外,不少语言都是用 C 来设计的, 好比 perl , java, python。服务器

C语言是一种通用性的编程语言,它既具备高级语言的特色,又具备汇编语言的特色。,1978年后,C语言已前后被移植到大、中、小及微型机上,它能够做为工做系统设计语言,编写系统应用程序,也能够做为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围普遍,具有很强的数据处理能力,不只仅是在软件开发上,并且各种科研都须要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用好比单片机以及嵌入式系统开发。尽管C语言是为实现操做系统软件而设计的,但它也普遍的应用于开发便携式应用软件。数据结构

代码:数据结构和算法

1 #include<stdio.h>
2 int main(void) 
3 {
4     printf("hello, world!n");
5     return 0;
6 }

 

 

2、闲说C++

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++是最流行的编程语言之一,它的应用领域涵盖了系统软件、应用软件、驱动程序、嵌入式软件、高性能的服务器与客户端应用程序和诸如电视游戏等娱乐软件。

代码:

1 #include<iostream>
2 using namespace std;
3 int main()
4 {
5     cout << "Hello, world" << endl;
6     return 0;
7 }

 

3、C和C++的联系与区别

面向过程的思路:分析解决问题所需的步骤,用函数把这些步骤依次实现。

面向对象的思路:把构成问题的事务分解为各个对象,创建对象的目的,不是完成一个步骤,而是描述某个事务在解决整个问题步骤中的行为。

从上述描述能够看出,其实面向对象和面向过程是两种思考解决问题的方式,其差别主要在于思考的角度。

C语言是面向过程的编程,它最重要的特色是函数,经过main函数来调用各个子函数。程序运行的顺序都是程序员事先决定好的。

C++是面向对象的编程,类是它的主要特色,在程序执行过程当中,先由主main函数进入,定义一些类,根据须要执行类的成员函数,过程的概念被淡化了(实际上过程仍是有的,就是主函数的哪些语句),以类驱动程序运行,类就是对象,因此咱们称之为面向对象程序设计。面向对象在分析和解决问题的时候,将涉及到的数据和数据的操做封装在类中,经过类能够建立对象,以事件或消息来驱动对象执行处理。

C语言和C++的最大区别在于它们解决问题的思想方法不同。C语言主要用于嵌入式领域,驱动开发等与硬件直接打交道的领域, C++能够用于应用层开发,用户界面开发等于操做系统打交道的领域。

C++既继承了C强大的底层操做特性,又被赋予了教科书式的面向对象机制。它特性繁多,有其余面向对象语言鲜见的多继承,有回味无穷的对值传递与引用传递入木三分的区分以及const关键字,等等。C++就像是一把瑞士军刀,或者像是一个工具箱,它为你提供尽量多的工具,多到让不熟悉它的人无所适从,让懂得如何使用它的人如鱼得水。C++的种种特性使得它很是适合用来编写底层数据结构,算法,库等,是系统软件开发以及数学模型构建等的强大武器库,被誉为工业级编程语言。

C++对C的“加强”,表如今如下几个方面:

类型检查更为严格。增长了面向对象的机制。增长了泛型编程的机制(Template)。增长了异常处理。增长了运算符重载。增长了标准模板库(STL)。增长了命名空间,避免全局命名冲突。

4、C++与C不兼容之处

C的大部分代码在C++上都能应用,而C++的代码在C上不能应用。(记住是大部分,不是全部)

C++是C语言的超集,虽然C++兼容C,可是C++中也有与C语言中不兼容的地方。

4.1 变量声明的位置

C中变量声明和代码是分开的,必须在函数开始处声明;

C++中,变量能够在任意处声明,只要保证先声名后使用的原则就能够。

4.2 struct结构体方面

用struct定义变量

struct mystruct{ int i;float x;

在c中声明struct变量要这么写:struct mystruct a;

在C++中前面不用加struct:mystruct a;

一种兼容的用法是:

typedef struct _mystructint i;float x;} mystruct;

而后用mystruct 定义变量。枚举型(enum),联合体类型(union)也是一样。

在C++中,struct结构体支持成员函数的定义,C中不行。另外要注意的是,C++中成员函数的默认访问说明符为public,这一点和类不一样,类的默认访问说明符为private.

4.3 bool类型值

C++中有bool(或boolean类型);C中可没有这样的bool类型,均为数值类型!须要注意的是真为非零(如:1,52,-5,-2等),假的数值为0。

4.4 注释的不一样

C中的注释至有一种 /*......*/;

C++中的注释包含两种/*......*/和//。

4.5 强制数据类型装换

C中的强制转化形式为:(类型)变量;

C++中还可使用:类型(变量)的形式。

4.6 赋值

C语言中的赋值只有一中即:=;

C++中除了使用=外,还可使用()。例如:int x(5);就等于: int x=5;我想这种写法是给C++中对象初始化时初始化属性是对象时使用的,那么对于基本类型也可使用了。

4.7 函数

C语言中函数没有参数默认值,在C++中函数有参数默认值的概念,注意参数默认值与函数重载的区别。

C语言中函数的定义又两种形式,经典形式和标准形式,C++中只支持标准形式。

标准形式:int string(int x,float y){......}

经典形式: int string(x,y)int x;float y;{......}

C++的函数必须先声名原型或定义才能使用,由于C++是强数据类型语言,在C语言中,未声名和定义函数以前调用函数是容许的.

4.8 运算符&和关键字const

&运算符最基本的含义是取地址,C和C++中都支持这一语法。但在C++中&还能够表示引用。有了引用的概念后函数调用能够做为左值。例如:

int &rtux()......rtux()=5;

以上表达式在C++中彻底正确,但在C语言中是非法的。

const关键字要注意一点不一样的就是在C++的类函数中,函数能够声名是能够用const,表示这个函数没有改变类中的任何属性。如:void unchange()const;C不能有这样的生明。

4.9 extern说明符

在C语言的某些版本中,能够在程序中屡次使用一个全局变量而无需使用extern说明符。但在C++中除定义全局变量外,在其余模块使用应先用extern生明。

4.10 void指针

在C语言中void指针能够赋给任何类型的指针,但在C++中,却不行,但能够先进行强制数据类型转换,在赋值。

 

做者:耑新新,发布于  博客园

转载请注明出处,欢迎邮件交流:zhuanxinxin@foxmail.com

相关文章
相关标签/搜索