学C语言和C++它有毛关系吗?

20200810234426.png

这是最近一周时间几个读者小伙伴所提的问题,我顺手截了两个图。

image
image

实不相瞒,这类问题之前也经常看到,但是我忘了截图了。

每次遇到这种问题,看起来很简单,但是打字一时半会还真说不清,想想今天周末了,写一篇文章来统一聊聊吧,如果小伙伴们有不同看法,也欢迎批评指正,评论区见。

image

本文在开源项目:https://github.com/hansonwang99/JavaCollection 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...


C语言和C++到底是什么关系?

首先C++C语言本来就是两种不同的编程语言,但C++确实是对C语言的扩充和延伸,并且对C语言提供后向兼容的能力。对于有些人说的C++完全就包含了C语言的说法还是有点别扭的。

C++一开始被本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)发明时,起初被称为“C with Classes”,即「带类的C」。很明显它是在C语言的基础上扩充了类class等面向对象的特性和机制。但是后来经过一步步修订和很多次演变(如下图所示),最终才形成了现如今这个支持一系列重大特性的庞大编程语言。

image

就像经典书籍《Effective C++》一开头就说的,现如今我们提到C++,都应该视其为一个庞大的「语言联邦」,最起码包含如下几个重要的组成部分:

  • 面向过程编程
  • 面向对象编程
  • 泛型编程
  • 元编程
  • 函数式编程
  • STL标准库

这其中的第一部分「面向过程编程」,正是C++提供的向后兼容C语言的部分,所以你能看到市面上在售的大部分讲C++编程的书,一开始前几个章节基本都是在讲「面向过程编程」的内容,包括但不限于:数据类型、变量、运算符、表达式、语句、判断、循环、函数、指针等等这些内容。


不学C语言能直接学C++吗?

还是像前面所说,C++编程语言的第一大重要组成部分就是「面向过程编程」,而这正是C语言老大哥的领域。即使没有学过C语言,一上来就直接学习C++的小伙伴,应该也难逃『面向过程』这一部分的内容。因为市面上在售的大部分讲C++编程的书,开始的章节都在讲「面向过程编程」的内容。

从理论上来说,学C++并不一定非得学C语言,但是有C语言底子再去学C++往往更具优势,最起码「面向过程编程」这一部分内容能够轻车熟路。

但是遗憾的是,即使是《C++ Primer》这种700多页厚的权威C++书籍,开头也只有很少一部分在讲「面向过程编程」,所以对于面向过程这一部分的讲述是肯定没有专门讲C语言的书籍剖析得细致和全面的,不然也不会有这种重点侧重于指针相关的《C和指针》等这类书籍的出现了。

所以个人建议是在学C++之前,C语言的基础还是尽量要夯实,肯定是有帮助的。


C学得好的,学习C++是否更具优势?

是的。

最起码学C++时,里面的「面向过程」这一部分内容可以说轻车熟路了。


C++能替代C语言吗?

既然C++这么强大,包含这么多模块和范式,而且也几乎包含了C语言面向过程这一部分的内容,那为啥还要学C语言呢?都直接学习C++它不香嘛?

是的,C++很强大没错,但那些强大的范式和机制本身带来的包袱就不轻,也确实给学习者造成了不小的负担,甚至劝退了很多人。

而反观C语言,C语言本身就是一个把能力性能效率学习成本权衡得非常极致的一种编程语言,以至于大学阶段必开的程序设计课程里基本都有C语言的身影。

而且C语言的应用领域极度广泛,上到操作系统底层的原生接口,下到普通的应用层开发,C语言都有着不小的功劳。以至于这么多年来,在Tiobe编程语言排行榜里,C语言都是居高位不下。

image

而且2020开年C语言重回巅峰王座,一举夺得「2019年度编程语言」。虽然这只是一个看起来很无聊的排名,但多多少少能说明一些事情。

image

所以无论是过去,现在,甚至是未来,近50岁的C语言老将军依然永不为奴。

image

只有C++这种面向对象的语言才适合大型项目吗?

C++的出现的确是为了更方便地开发大型应用程序,毕竟面向对象编程里的很多重要思想和机制都对大型项目和复杂系统所要求的项目工程化、代码复用性/扩展性/可维护性等提供了强大的支撑。

但是摆在眼前的事实告诉我们,即便是C语言,也照样可以构建出极其复杂的系统和软件。上到Linux这种旷世伟大的操作系统内核,小到被各个公司重度依赖的RedisNginx等开源软件或框架,都是C语言的代表作品。

所以有时候我们不得不承认的是,大家所说的抽象能力更多的是看写这个程序的人,而并非编程语言本身。


小 结

好啦,扯得有点多了,总结一下就是:

  • C语言和C++是两个不同的编程语言,只不过内容上有一定的重叠;
  • C语言是一门很强大的编程语言,我觉得有机会还是要学一下;
  • 一般来说,有了C语言的基础,上手C++也会更快;
  • C++C各有各的选用考虑和应用场景,并没有谁更好一说,学不学看自己的兴趣和自身技术发展的考量

书籍推荐

最后聊一聊学习C语言和C++的书籍吧。

个人觉得如果想系统学习这两门语言,最好还是得看一下经典的书籍。

关于C语言学习书籍,最最权威的当然是C语言的发明者Dennis M. Ritchie所著的《The C Programming Language》(它也有中文版的),除此之外《C Primer Plus》也很系统全面。

关于C++的学习书籍,最权威的当属C++的发明者Bjarne Stroustrup大佬所著的《The C++ Programming Language》,但是很明显这本书不适合初学者,更加适合的还得是《C++ Primer》,也很系统全面。至于再深入可以继续阅读诸如《Effective C++》、《STL源码剖析》、《深度探索C++对象模型》等书籍。

这些书读完,成神之路便可由此开启。

本文在开源项目:https://github.com/hansonwang99/JavaCollection 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...


每天进步一点点

慢一点才能更快

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343