乐趣区

关于c:学C语言和C它有毛关系吗

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

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

每次遇到这种问题,看起来很简略,然而打字一时半会还真说不清,想想明天周末了,写一篇文章来对立聊聊吧,如果小伙伴们有不同认识,也欢送批评指正,评论区见。

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


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

首先 C++C语言原本就是两种 不同的 编程语言,但 C++ 的确是对 C 语言的裁减和延长,并且对 C 语言提供后向兼容的能力。对于有些人说的 C++ 齐全就蕴含了 C 语言的说法还是有点顺当的。

C++一开始被本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)创造时,起初被称为 “C with Classes”,即「带类的C」。很显著它是在C 语言的根底上裁减了类 class 等面向对象的个性和机制。然而起初通过一步步订正和很屡次演变(如下图所示),最终才造成了现如今这个反对一系列重大个性的宏大编程语言。

就像经典书籍《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语言都是居高位不下。

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

所以无论是过来,当初,甚至是将来,近 50 岁的 C 语言老将军仍然永不为奴。


只有 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++ 的学习书籍,最权威的当属 C++ 的发明者 Bjarne Stroustrup 大佬所著的《The C++ Programming Language》,然而很显著这本书不适宜初学者,更加适宜的还得是《C++ Primer》,也很零碎全面。至于再深刻能够持续浏览诸如《Effective C++》、《STL 源码分析》、《深度摸索 C ++ 对象模型》等书籍。

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

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


每天提高一点点

慢一点能力更快

退出移动版