内容简介:1 C语言C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。并且他用B语言写了第一个UNIX操作系统。
1 C语言
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++的学习环境, 可以加入我们的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代码 / } 内。
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-
以上所述就是小编给大家介绍的《CC++语言0|C和C++的联系与区别》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 大话-URL和URI的区别和联系
- 2019年 自家炎陵高山黄桃开园,欢迎联系订购!
- 11 Weeks of Android:联系人与身份
- 持续集成与持续交付之间的联系和区别 原 荐
- 递归与迭代的联系以及优缺点(以c++为例)
- 架构设计基础:单服务、集群、分布式的基本区别和联系
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web 2.0 Architectures
Duane Nickull、Dion Hinchcliffe、James Governor / O'Reilly / 2009 / USD 34.99
The "Web 2.0" phenomena has become more pervasive than ever before. It is impacting the very fabric of our society and presents opportunities for those with knowledge. The individuals who understand t......一起来看看 《Web 2.0 Architectures》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
HEX CMYK 转换工具
HEX CMYK 互转工具