C(c)和C++(c++)的区别

对C语言和C++语言的应用、使用和语言特点进行了客观的比较。讨论了这两种编程语言的起源和发展轨迹。...

对C语言和C++语言的应用、使用和语言特点进行了客观的比较。讨论了这两种编程语言的起源和发展轨迹。

对比图

C与C++比较表
C C++
额定电流为4.02/512345(410额定值) 额定电流为4.14/512345(405额定值)
设计人 丹尼斯·里奇 本贾尼·斯特劳斯特卢普
垃圾收集 手册;允许更好地管理内存。 在C++标准库(标准)上没有总承包商可用。然而,标准提供了有效和确定的方法来管理资源,如对象所有权和引用计数。
影响 b(bcpl,cpl),algol 68组装 c、 simula、ada 83、algol 68、clu、ml
出现在 1972 1985
班级 而是使用结构,因此可以更自由地使用内部设计元素 类和结构
面向对象程序设计 不内置;自由设置结构,使其像物体一样工作。缺乏声明封装的能力。 内置;对象的大小和内存布局是确定的。虚拟函数调用可以在没有函数表的情况下通过crtp公司完成。
主要实施 gcc、msvc、borland c、watcom c gnu公司编译器集合,微软Visual C++,Borland C++ Builder,英特尔C++编译器,llvm/叮当声
打字纪律 静态,弱 静态、强、不安全、主格
块注释分隔符 /*以及*/ /*以及*/
语句终止符 ; ;
内联注释分隔符 // //
影响 AWK、CSH、C++、C语言、对象c、bitc、d并发c、 java、javascript、limbo、perl、php ada 95、c、java、php、d合气道
常用文件扩展名 C .cc、.cpp、.cxx、.h、.hh、.hpp
范式 命令式(过程式)系统实现语言 多范式,面向对象,通用,过程,功能,元
动态调整阵列大小
平台 地球上几乎所有的东西;需要重新编译 几乎任何东西,包括基于操作系统和非操作系统的平台
速度 C应用程序比C++应用程序更快地编译和执行 如果你知道如何很好地利用C++,那么与C相比,+-5%、C++和C程序的性能通常是相等的,因为两种语言的编译器都是成熟的。
执行流程 从上到下 从上到下
编程包括 #包括 #包括
编程字符串类型 没有本机字符串类型;通常声明为字符数组 数组,标准::字符串
编程输入/输出 输入扫描;输出的打印F 流,流(标准::中国标准::库特)
代码 使用类似密件抄送的编译器编译为本机二进制可执行文件。 编译为本机二进制可执行文件
语言类型 面向过程的语言 多范式面向对象语言
编制人 丹尼斯·里奇和贝尔实验室 本贾尼·斯特劳斯特卢普
面向对象 不是天生的 是的
泛型程序设计 是的
程序设计 是的 是的
函数式程序设计 是的 部分
元程序设计 是的
反射
支持多维数组 是的 是的
平台 任何有编译器的 任何有编译器的

C和C++的起源

贝尔实验室的丹尼斯·里奇(dennisritchie)在1972年设计了通用计算机编程语言C,用于当时的操作系统UNIX。C主要用于系统软件编程,但对于创建通用应用软件也非常有用。有些形容词用来形容C是块结构的,祈使式的;程序语言。

C++(原名“C with Classes”,在计算机界仍被称为C的上层结构)是由Bjarne Stroustrup于1983年在贝尔实验室开发的C增强版。Stroustrup,1979,通过添加类、虚拟函数、运算符重载、多重继承、模板、异常处理等。C++编程语言标准在1998被批准为ISO/IEC 1488∶1998,当前版本是2003版本。ISO/IEC 1488∶2003实际上是C++ 1998的修正版本。2005中发布的“库技术报告1”给出了标准库的扩展细节,而不是标准版的一部分。该标准的新版本(非正式地称为C++0x)正在开发中。1990以来,C++是一种非常成功的商业编程语言。虽然C++是免版税的,但它的文档并不是免费的。

C与C++的用法

事实证明,C在运行汇编语言编写的应用程序时非常有用,因为它具有编译器简单、内存访问级别低、运行时支持率低以及与硬件指令同步的高效构造语言等优点。它的另一个优点是它是一个高度可移植的(与各种操作系统兼容);平台),所需的源代码更改非常少。因此,它支持远程操作;独立于硬件。C也符合各种标准,使它可以处理所有的事情。

C++被称为中级语言。由于C++包含高级语言和低级语言特征。用于描述C++的一些形容词是静态类型、自由形式、多范例和支持过程编程。

Stroustrup在为博士论文编程时发现Simula语言具有高级特性,有助于大型软件开发,但实际使用速度太慢;而BCPL(语言)速度快,但级别太低,因此不适合大型软件开发。在贝尔实验室,他不得不从分布式计算的角度分析UNIX内核,这就产生了更多的问题,他着手用Simula的特性来增强C(由于它的超可移植性)。1983在C++中创建了附加的功能,如虚拟函数、函数名和运算符重载、引用、常量、用户控制的自由存储存储器、改进类型检查和带有两个前斜杠(//)的单行注释。Cfront(商业版)于1985年发布,具有类、派生类、强类型检查、内联和默认参数特性。1985也看到了C++编程语言的发布,这是缺乏官方标准的语言的重要参考。其次是在1989中发布C++ 2,其特征是多继承、抽象类、静态成员函数、c***t成员函数和受保护成员。模板、异常、名称空间、新类型转换和布尔类型等特性都是1990年后添加的。

随着语言的发展,它的库也在不断发展,增加了流I/O库、标准模板库等。

由dennisritchie&briankernighan(原名:C编程语言)编写的K&R一书的第一版描述了他们的C版本为K&rcc,并给出了完整的规范,而后来的版本包括了ANSI(美国国家标准协会)C标准。所描述的一些显著特征包括引入各种数据类型、消除一些语义歧义、省略其他函数声明等。即使在引入ansic之后,K&R C仍然是程序员最可移植的编程语言,因为它具有更广泛的兼容性。

K&R函数声明不包含任何有关导致函数参数类型检查无法执行的函数参数的信息,不过,如果使用错误数量的参数调用本地函数,或者如果对外部函数的多个调用使用不同数量的参数,则某些编译器会发出警告消息。UNIX的lint实用程序等工具是为检查跨多个源文件使用的函数的一致性而创建的。

语言特点

c的特性

C的一些重要特征如下:

  1. 结构化编程工具
  2. 符合阿尔戈传统
  3. 短路求值–如果结果可以单独确定,则只使用一个操作数
  4. 避免意外操作的静态打字系统
  5. 值传递参数与指针值传递相关
  6. 异构数据组合与操作
  7. 保留关键字和自由格式源文本
  8. 更多的复合运算符,如+=++
  9. 巨大的变量隐藏容量,尽管函数定义是不可嵌套的
  10. 字符-整数用法类似于汇编语言
  11. 通过机器地址和键入的指针对计算机内存的低级访问
  12. 函数指针允许基本形式的闭包和多态运行时
  13. 指针算术定义数组索引(次要概念)
  14. 用于定义宏的标准化处理器,包括源代码文件和条件编译
  15. 复杂的输入/输出和数学函数,对库例程具有一致的授权
  16. 语法与“B”(C的前身)相同,但与ALGOL不同,例如:{…}替换开始。。。结束(&E)&和| |替换和&或者,哪个
  17. 虽然B在两种意义中都使用了&和|,但C使它们在语法上不同于按位运算符
  18. 与Fortran的相似之处,例如:赋值的等号(复制)&两个连续的等号以测试相等性(与EQ比较)或基本中的等号)

其他随时间增加的非官方功能包括:

  1. 虚函数
  2. 返回结构或联合类型而不是指针的函数
  3. 为结构数据类型启用分配
  4. 使对象只读的常量限定符
  5. 枚举类型
  6. 创造工具,避免语言固有的问题

很快,C变得足够强大,可以重新编写UNIX内核(用汇编语言编写),使其成为第一批用汇编语言以外的语言编写的OS内核之一。

C++的特点

  1. C++被设计成一种静态类型的通用语言,它与C一样高效和便携。
  2. C++是直接和全面支持多种编程风格(程序编程、数据抽象、面向对象编程和泛型编程)的。
  3. 设计C++是为了给程序员选择,即使这使得程序员有可能错误地选择。
  4. C++被设计成尽可能与C兼容,因此提供了从C平滑过渡。
  5. C++避免了特定于平台或非通用的特性。
  6. C++不为未使用的特征带来开销。
  7. 在没有复杂的编程环境的情况下,C++被设计为运行。

多态性是C++的一个突出的特性,它包含许多实现,其中有一个中间相,对象可以根据情况进行操作。C++支持静态(编译时)和动态(运行时)多态性。编译时多态性不允许某些运行时决策,而运行时多态性通常会导致性能损失。C++虽然被认为是C的超集,但在C++中,一些有效的C代码无效或在C++中有不同的行为,这就存在一些差异。像C++定义新关键词的问题,即新的和类,在C中用作标识符。C和C++代码可以通过声明C++中的任何C代码和C链接和C语言来混合。把它放在一个外部的“C”{/*C代码*/}块中。

两种语言的发展

随着时间的推移,标准化变得越来越重要,因为随着语言的日益普及,大量的扩展和随机的库以及编译器没有按照规范进行精确的实现。C标准化过程的目标之一是生成K&rcc的超集,其中包含了随后引入的许多非官方特性。然而,标准委员会包含了一些新特性,比如函数原型、空指针、对国际字符集和区域设置的支持以及一个更强大的预处理器。参数声明的语法也得到了扩充。1970年代以后,C取代了BASIC作为微处理器编程的主导语言,并在与IBM PC的合作中变得流行起来。与此同时,贝尔实验室的Bjarne Stroustrup和其他人开始创建C++,它向C添加了面向对象的编程语言构造。此外,ANSI于1983年成立了一个名为X3J11的委员会,以建立C的标准规范,1989年,该标准被批准为ANSI X3.159-1989“编程语言C”。这是通常被称为ANSI C、标准C或C89的C版本。1990年推出的C90与C89完全相同,除非有一些小改动。当C++快速发展时,C保持静态直到1995,当标准修订1创造了一个新的标准,它被进一步修订,导致1999出版了ISO9899:1999。这个标准通常被称为“C99”。它在2000年3月被作为ANSI标准采用。

  • 内联函数
  • 能够在任何地方声明变量,而不是仅在另一个声明之后或在复合语句的开头
  • 新的数据类型,如long-long int、可选的扩展整数类型、显式布尔数据类型和表示复数的复数类型
  • 数组长度可以是可变的
  • 支持以//开头的单行注释
  • 像snprintf这样的库函数
  • 新的头文件,如stdbool.h和inttypes.h
  • 键入泛型数学函数(tgmath.h)
  • 改进了对IEEE浮点的支持
  • 指定的初始值设定项
  • 复合文字
  • 支持可变宏(具有可变arity的宏)

C++,在继续发展以满足未来的需求时,一种更新的版本叫做C++ 0x,表示它预计在2010之前发布。迹象表明,C++将继续利用其多范式性质和显著的改进可能是本地支持线程和概念,从而使与模板更容易。更具争议的是,添加垃圾收集目前正在激烈讨论中。一个名为BooSt.ORG的小组,为C++标准委员会提供了良好的特性和改进建议,正在广泛地开发具有扩展功能和元编程能力的C++的当前形式。

在C++(1994)的设计和演化中,Bjarne Stroustrup描述了他设计C++的一些规则。了解规则有助于理解为什么C++是它的方式。更多的细节可以在C++的设计和演化中找到。

影响

C的影响可以追溯到AWK、CSH、C++、C、D、Objul-C、CONTRONEONC C、BitC、java和JavaScript、LIMBO、Perl、PHP等。C的一些主要实现包括Borland C、WATCOM C、GCC和AMP;MSVC公司。C++的信誉影响了其他的工作,如D、C、艾达、95、合气道、java和AMP;菲律宾比索。

C与C++的批评

尽管C很受欢迎,但人们一直批评它的理**作太难实现,而不理想的操作太容易意外调用,因此比其他编程语言更需要程序员的技能、经验、精力和对细节的关注;有效使用语言。

当面向对象语言变得流行时,C++是C的扩展,它提供了面向对象的能力,C++最初是作为预处理器实现的——源代码被翻译成C,然后用C编译器编译。

C++是从C派生出来的,也继承了大部分针对C的批评。但由于该语言实际上是两种不同语言的组合,再加上庞大的程序负载,最终往往会使编译变得庞大,而且在纯规模上不合适。当试图通过禁用一些边缘代码来避免这个问题时,它又被批评失去了几个重要的实用程序。C++的创建者也觉得C++是一种复杂的语言,因为现代编程的需求与过去相比,也有了巨大的增长。

参考文献

  • 其中C和C++不同-C编程

  • 发表于 2021-07-03 23:26
  • 阅读 ( 207 )
  • 分类:IT

你可能感兴趣的文章

python(python)和c级++(c++)的区别

...了许多新的特性,帮助控制程序的复杂性。   python和c的区别++ Python和C++基础 Python是一种灵活的、面向对象的、开源的编程语言,旨在优化开发速度,并使编写可以理解、重用和修改的软件变得容易。它是专门为提高脚本领域...

  • 发布于 2021-06-25 22:55
  • 阅读 ( 446 )

打破(break)和在C++中继续(continue in c++)的区别

C++中中断和继续的主要区别是中断被用来立即终止循环并将控制传递到循环之后的下一个语句,而继续被用来跳过循环的当前迭代。 C++是一种高级通用编程语言。它是C语言的高级版本。换句话说,C++类似于C,但是它支持面向对...

  • 发布于 2021-07-01 04:32
  • 阅读 ( 238 )

新的(new)和C++中删除运算符(delete operator in c++)的区别

C++中new和Delphi运算符的主要区别在于new被用来为对象或数组分配内存,而DELATE用于释放使用新运算符分配的内存。 有两种类型的记忆作为静态和动态记忆。假设一个语句,比如int a;int数组[10];程序员已经知道这些变量需要多...

  • 发布于 2021-07-01 04:35
  • 阅读 ( 183 )

C++(c++)和JAVA(java)的区别

C++与java的主要区别在于C++依赖于平台,而java与平台无关。 计算机程序是一组允许CPU执行某些任务的指令。有多种编程语言。基本上,语言有两种主要类型:高级语言和低级语言。程序员更容易阅读和理解高级语言。它们遵循与...

  • 发布于 2021-07-01 07:51
  • 阅读 ( 335 )

visual basic语言(visual basic)和Visual C++(visual c++)的区别

Visual Basic与Visual C++的主要区别在于Visual Basic是面向对象的编程语言,Visual C++是集成开发环境(IDE)。 visualbasic是微软开发的一种用户友好的编程语言。在visualbasic.NET发布之前,它的最终版本是visualbasic6.0。另一方面,Visual C++是...

  • 发布于 2021-07-01 09:31
  • 阅读 ( 382 )

静止的(static)和C++中的常量函数(constant function in c++)的区别

C++中静态和常量函数的主要区别在于静态函数允许使用类调用函数,而不使用对象,而常量函数不允许修改对象。 C++是Bjarne Stroustrup在1979开发的一种编程语言,C++类似于C,但比C语言具有更多的特性。因此,它被称为C语言的一...

  • 发布于 2021-07-01 09:34
  • 阅读 ( 278 )

友元函数(friend function)和C++中的正规函数(normal function in c++)的区别

C++中Frand函数与Calm函数的主要区别是,Frand函数有助于访问私有数据和受保护数据,而正常函数是执行特定任务的一组语句。 C++是Bjarne Stroustrup在1979开发的一种程序设计语言,它与C语言相似,但它的C语言具有更多的特性。C++中...

  • 发布于 2021-07-01 11:43
  • 阅读 ( 256 )

基类(base class)和C++中派生类(derived class in c++)的区别

C++中基类和派生类的主要区别在于基类是已经存在的类,而派生类是继承基类的属性和方法的类。 C++是贝尔实验室Bjarne Stroustrup开发的一种高级通用编程语言。它是C语言的超集。程序员可以使用C++实现面向对象编程(OOP)概念...

  • 发布于 2021-07-01 14:50
  • 阅读 ( 742 )

有限责任公司(lldb)和gdb公司(gdb)的区别

LLDB与GDB的主要区别在于,LLDB中,程序员可以调试C、Objic C和C++中的程序,而在GDB中,程序员可以调试艾达、C、C++、Objic C、Pascal、FORTRAN和GO编写的程序。 通常,调试器是帮助测试和调试其他程序的计算机程序。LLDB和GDB是两个调...

  • 发布于 2021-07-02 01:57
  • 阅读 ( 883 )

合同通用条款(gcc)和cc编译器(cc compiler)的区别

...。合同通用条款(gcc) vs. cc编译器(cc compiler)GCC和CC编译器的区别在于GCC被称为GNU编译器操作系统,而CC是UNIX编译器命令。这两个编译器互不兼容。这是因为C++程序与C库兼容,而C程序与C++库不兼容。GCC被称为GNU编译器集合。它已经...

  • 发布于 2021-07-12 02:07
  • 阅读 ( 192 )
xxl6382
xxl6382

0 篇文章

相关推荐