CC++语言0|C和C++的联系与区别

1 C语言java

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

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

1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母做为这种语言的名字,这就是C语言。
最后,若是你们若是在自学遇到困难,想找一个C++的学习环境,能够加入咱们的C++学习圈,点击我加入吧,会节约不少时间,减小不少在学习中遇到的难题。
图片描述程序员

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

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

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

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

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

1.1 C语言是一个有结构化程序设计、具备变量做用域(variable scope)以及递归功能的过程式语言。数据结构和算法

1.2 C语言传递参数有值传递(pass by value)和指针传递(a pointer passed by value)两种方式。

1.3 不一样的变量类型能够用结构体(struct)组合在一块儿。

1.4 只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。

1.5 部份的变量类型能够转换,例如整型和字符型变量。

1.6 经过指针(pointer),C语言能够容易的对存储器进行低级控制。

1.7 预编译处理(preprocessor)让C语言的编译更具备弹性。

示例代码:

include <stdio.h>

int main(void)
{
printf("hello, world!n");
return 0;
}
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++是最流行的编程语言之一,它的应用领域涵盖了系统软件、应用软件、驱动程序、嵌入式软件、高性能的服务器与客户端应用程序和诸如电视游戏等娱乐软件。

2.1 简单(Simple)

C++是一种简单的语言,它提供告终构化方法(将问题分解成几个小部分),丰富的数据类型、库函数集和类库集等。

2.2 机器独立或移植(Portable)

与汇编语言不一样,C/C++语言程序能够在许多机器中执行,但可能有一点点或没有变化。但它不是平台无关的。

2.3 中级编程语言(Mid-level)

C++也用于作低级编程。它用于开发系统应用程序,如内核,驱动程序等。它还支持高级语言的特性。这就是为何它被称为中级语言。

2.4 结构化编程语言(Structured)

C++是一种结构化编程语言,咱们可使用函数将程序分解为多个小部分。因此,它很容易理解和修改。

2.5 丰富程序库(Rich Library)

C++提供了许多内置函数(程序库),一些经常使用的功能不用再去重头开始编写,有助于提升开发速度。

2.6 内存管理(Memory Management)

它支持动态内存分配的特性。在C++语言中,能够经过调用free()函数随时释放分配的内存。

2.7 运行速度快(Fast Speed)

C++语言的编译和执行时间都很是快。

2.8 指针功能(Pointers)

C++提供指针的功能。能够经过使用指针直接与内存交互。咱们可使用内存,结构,函数,数组等指针。

2.9 递归(Recursion)

在C++中,能够调用函数内的函数。它为每一个函数提供代码可重用性。

2.10 可扩展(Extensible)

C++语言是可扩展的,由于它能够比较容易地采用新的功能。

2.11 面向对象(ObjectOriented)

C++是面向对象的编程(OOP)语言。OOP使开发和维护变得更容易,由于在面向过程的编程语言中,若是代码随着项目规模的增加而增加,就不容易管理。

2.12 基于编译器(Compiler based)

简单讲,编译器就是将“一种语言(一般为高级语言)”翻译为“另外一种语言(一般为低级语言)”的程序。一个现代编译器的主要工做流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 连接器(Linker) → 可执行程序 (executables)。

示例代码:

include <iostream>

int main()
{
std::cout << "Hello, world!n";
}
3 C和C++的联系与区别

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

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

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

4 C++对C的“加强”

4.1 类型检查更为严格。

4.2 增长了面向对象的机制。

4.3 增长了泛型编程的机制(Template)。

4.4 增长了异常处理。

4.5 增长了运算符重载。

4.6 增长了标准模板库(STL)。

4.7 增长了命名空间,避免全局命名冲突。

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

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

5 C++与C不兼容之处

上面说了C的大部分代码在C++上都能run的溜溜的,可是也有少数C代码会在C++中失效,或者在C++中有不一样的行为。例如:隐式转换。

5.1 最多见的差别之一是,C容许从void*隐式转换到其它的指针类型,但C++不容许。下列是有效的C代码:

//从void*类型隐式转换为int*类型
int *i=malloc(sizeof(int)*5);

但要使其在C和C++二者皆能运做,就须要使用显式转换:

int *i=(int*)malloc(sizeof(int)*5);

5.2 在C中,屡次声明一个全局变量虽然不可取,但不算错。在C++中,屡次声明同一个全局变量会引起错误。

5.3 另外一个常见的可移植问题是,C++定义了新关键字,例如如new,class,它们在C程序中能够做为识别字(例:变量名)的。

在C标准(C99)中去除了一些不兼容之处,也支持了一些C++的特性,如//注解,以及在代码中混合声明。不过C99也归入几个和C++冲突的新特性(如:可变长度数组、原生复数类型和复合逐字常数)。

5.4 若要混用C和C++的代码,则全部在C++中调用的C代码,必须放在 extern "C" { / C代码 / } 内。
clipboard.png

CC++语言0|C和C++的联系与区别
6 从C 到 C++ 的一些建议

6.1 慎用宏

6.1.1 用const替换#define宏替换

#define PAI 3.14 //慎用
const double PAI = 3.14 // 推荐

6.1.2 枚举让元素更有关联性

define ERROR 0

define SUCCESS 1

// 推荐如下写法
enum STATE{ERROR,SUCCESS}
6.1.3 用内联函数代替带参数的宏

define max(a,b)((a)>(b)?(a):(b))

// 推荐如下写法

inline int max(int a,int b){
return a > b ? a:b;
}
6.2 变量随用随声明同时初始化

6.3 尽可能使用 new/delete 取代 malloc/free

6.4 少用 void*,指针计算、联合体和强制类型转换

6.5 少用 c 风格的 char*,多用 string 表示字符串

-End-

相关文章
相关标签/搜索