说到C语言,就不得不说它的继承者——C++语言。众所周知,C++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。虽然因为天然的血缘关系,导致两者非常相似,就像父亲与儿子相貌相似一样,但是,父亲和儿子毕竟是两个不同的各自独立的个体,而C语言和C++语言也同样是两种各自独立、各有其特点的程序设计语言。在对硬件资源的操作上,C语言更加直接,而C++语言则相对温和一些。

除了这些语法规则上的差异之外,两者最本质的差别在于所采用的程序设计方法的不同。C语言是一门结构化程序设计语言,正如谭老师所说,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程(通常表现为函数的形式),对输入(或环境条件)进行运算处理得到输出(或实现对过程或者事务的控制);而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的实际问题,这样就可以通过获取对象的状态信息得到输出或实现对过程或事务的控制。

所以C语言与C++语言的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“设计”这个概念已经被融入到C++之中,而单就语言本身而言,在C中更多的是算法的概念。C语言可以说是C++语言的一个自治子集。C语言实现了C++语言中的过程化控制及其他相关功能,而在C++语言中的C(我们可以称之为“C+”),相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等新鲜玩意儿,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和容器类等等,使之更加符合现代程序设计的需要。

从这些C语言和C++语言的对比来看,C++语言作为C语言的继任者,似乎已经全面超越了C语言,正所谓青出于蓝而胜于蓝。那么我们自然会产生一个疑问,既然C++语言比C语言优秀,为什么我们不直接学习更优秀的C++语言而要学习它的过去时——C语言呢?

毫无疑问,C++是一门优秀的程序设计语言,它吸收了C语言的诸多优点,同时又添加了很多现代程序设计语言的新特性,这也是它为什么能够成为主流的程序设计语言而长期屹立不倒的原因。但是,这个世界上没有万灵丹,任何语言都不是万能的,C++也并不是适合于所有应用场景。在某些方面,C语言有着比C++语言更大的优势。很多C++不能完成的任务,C语言可以轻松完成。例如在NVIDIA CUDA计算系统上,由于操作系统ABI特性的限制以及其特殊架构的执行单元,无法支持C++初始化的任务,最终只实现了C语言,过于复杂的C++最终没有实现。很多嵌入式开发系统,都只是提供了C语言的开发环境而并没有提供C++的开发环境;很多C++语言不愿意干的脏活累活,C语言干起来快活得很。例如某些对性能要求极高的大型系统,诸如搜索引擎算法、银行金融系统等等,只有勤快的C语言能够出色地完成这些任务,而C++因为过于复杂,在这方面就稍逊一筹了。

正是因为C语言兼顾了接近底层与更高性能的特性,同时语言又比C++语言更加简洁,使得它自从上世纪70年代被创建以来,一直都是一门主流的程序设计语言,受到广大程序员的钟爱。而随着当今世界嵌入式开发的发展、大型算法应用,特别是搜索引擎、云计算的兴起,C语言的用武之地不但没有萎缩,反而有逐渐扩展的趋势。所以,如果你有意向这些领域发展,C语言是你的不二之选。

综合起来看,对C语言和C++语言的学习可以相互促进。学好C语言,可以为我们将来进一步地学习C++语言打好基础,而C++语言的学习,也会促进我们对于C语言的理解,从而更好地运用C语言。

C语言与C++不得不说的那点事相关推荐

  1. JUC-不得不说的Java“锁”事

    不得不说的Java"锁"事 前言 一synchronized 1. 变量安全性 2.多个对象多个锁 3.synchronized方法与锁对象 4.脏读 5.synchronized ...

  2. 重生之——C语言与我不得不说的故事(正文篇)

    目录 1.指针 1.1指针的声明: 1.2间接访问操作: 1.3NULL指针 1.4指针常量 1.5指针的指针 1.6指针的运算 1.6.1算术运算 1.6.2关系运算 2.函数 2.1函数的定义 2 ...

  3. c语言枚举类型有什么作用,关于C语言枚举类型不得不说的故事

    经济学家说过,路边是不会有100元的,但是如果有,你还是要捡起来.本文引用地址:http://www.eepw.com.cn/article/202005/413512.htm 同理,在貌似万物免费的 ...

  4. 「基本功」不可不说的Java“锁”事

    并发编程是Java程序员必备基本功,今天"基本功"专栏向大家推荐一篇深入解析Java锁机制的文章.Enjoy! 前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景 ...

  5. 关于Go语言,你可能会讨厌的五件事

    近年来,Go从新出现的编程语言中脱颖而出.不过要把Go称为"新晋者"似乎并不合适,因为谷歌早在2009年就推出了Go,并于2012年发布了第一个最终版(Go 1.0).到现在为止, ...

  6. 不可不说的Java“锁”事 - 美团技术团队

    前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6).使用场景进行举例,为读者介绍 ...

  7. 软件卸载不得不说的几件事

    电脑用久了,软件也装了不少,但并不是每一款软件都那么让人心动,希望永远与之相伴,于是装了卸,卸了装的事不少,但似乎目前还没有一款软件能够痛痛快快地来,痛痛快快地走,它们总喜欢在你的Windows中留点 ...

  8. 关于c语言printf和++a、a++的那些事

    c语言printf的工作原理 首先,c语言的printf函数的参数采用的是栈的输入计算方式,即先将printf的 参数通过计算后将结果按照从右往左的顺序输入到栈中,再先进后出的输出出来, 这就是c语言 ...

  9. 3.3.2 函数参数不得不说的几件事

    函数定义时圆括号内是使用逗号分隔开的形式参数列表(parameters),一个函数可以没有参数,但是定义和调用时一对圆括号必须要有,表示这是一个函数并且不接受参数.函数调用时向其传递实参(argume ...

最新文章

  1. 大盘点|6D姿态估计算法汇总(上)
  2. Socket编程实战
  3. 【阿里云课程】如何从零开始完成第一个GAN项目
  4. SpringBoot 自定义Kafka消息序列化和反序列化
  5. python 字符串 数字_Python基础教程:数字、字符串
  6. pb,json,二进制,xml数据对比
  7. 数据库设计(一对一、一对多、多对多)
  8. c ++ 函数的esp指针_在C ++中通过指针访问成员函数
  9. ASP.NET MVC one view bind many model
  10. java与js的split方法
  11. LVS基本介绍及NAT模型配置示例
  12. cei()、linspace()、arrange()、full()、eye()、empty()、random()
  13. 网页打开慢/正在解析主机-解决
  14. 如何管理一盘散沙的团队?
  15. [问题解决]电脑有线 连接天翼光猫 不分配ip 电脑有线无法上网
  16. word生成目录右对齐
  17. 扇贝python编程课_扇贝编程app下载-扇贝编程手机版python「附如何设置自由职业」 - 超好玩...
  18. (十五)深入理解蓝牙BLE之“扩展广播”
  19. 直方图规定化(直方图匹配)
  20. 【无标题】灵遁者相观天下,相学培训书籍

热门文章

  1. mysql添加用户查重的方法_mysql 开发技巧之JOIN 更新和数据查重/去重
  2. dataimagepng php_nginx无法打开 dataimage/php
  3. 【c语言】蓝桥杯算法提高 统计平均成绩
  4. 【c语言】蓝桥杯算法训练 成绩的等级输出
  5. html怎么让导航栏平均分布,CSS 怎么让按钮平均分布
  6. java规约下载_Java规约 PDF 下载
  7. Tornado、Bottle以及Flask
  8. mysqldump备份数据库时出现when using LOCK TABLES
  9. oracle存储过程dbms_output.put_line()显示打印结果
  10. 解决Windows Installer的错误