当前位置: 首页 > article >正文

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

C++ 读作“C 加加”,是“C Plus Plus”的简称。

顾名思义,C++ 就是在 C 语言的基础上增加了新特性,玩出了新花样,所以才说“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。

C 语言是 1972 年由美国贝尔实验室开发成功的,在当时算是高级语言,它的很多新特性都让汇编程序员羡慕不已,就像今天的 Go 语言,刚出生就受到追捧。C 语言也是“时髦”的语言,后来的很多软件都用 C 语言开发,包括 Windows、Linux、Mac OS、MySQL、Python 等。

但是随着计算机性能的飞速提高,硬件配置与几十年前已有天壤之别,软件规模也不断增大,很多软件的体积都超过 1G,例如 PhotoShop、Visual Studio 等,用 C 语言开发这些软件就显得非常吃力了,这时候 C++ 就应运而生了。

C++ 主要在 C 语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。

C 和 C++的血缘关系

早期并没有“C++”这个名字,而是叫做“带类的 C”。“带类的 C”是作为 C 语言的一个扩展和补充出现的,目的是提高开发效率,如果你有 Java Web 开发经验,那么你可以将它们的关系与 Servlet 和 JSP 的关系类比。

这个时期的 C++ 非常粗糙,仅支持简单的面向对象编程,也没有自己的编译器,而是通过一个预处理程序(名字叫 cfront),先将 C++ 代码“翻译”为 C 语言代码,再通过 C 语言编译器合成最终的程序。

随着 C++的流行,它的语法也越来越强大,已经能够很完善的支持面向对象编程和泛型编程。但是一直也没有诞生出新的 C++ 编译器,而是对原来 C 编译器不断扩展,让它支持 C++ 的新特性,所以我们通常称为 C/C++ 编译器,因为它同时支持 C 和 C++,例如 Windows 下的微软编译器(cl.exe),Linux 下的 GCC 编译器。

也就是说,你写的 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++,怕什么。


http://www.kler.cn/a/593237.html

相关文章:

  • LeetCode135☞分糖果
  • FreeSWITCH:开源通信平台的全栈解决方案
  • 荣耀手机卸载应用商店、快应用中心等系统自带的
  • Vue.js 插槽(Slot)详解:让组件更灵活、更强大
  • 开源链动 2+1 模式 AI 智能名片 S2B2C 商城小程序助力社群发展中榜样影响力的提升
  • 基于springboot+vue的调查问卷平台
  • Oracle OCP认证没落了吗?
  • 【leetcode100】搜索插入位置
  • ADQ12DC-PCIe总线直流耦合1G采集卡
  • 【leetcode100】搜索二维矩阵
  • Android Room 框架测试模块源码深度剖析(五)
  • Linux驱动开发-①pinctrl 和 gpio 子系统②并发和竞争③内核定时器
  • 【模拟】从 0 到 1:模拟算法的深度剖析与实战指南
  • 实验4 Vue.js路由实验
  • 【AI论文】ReCamMaster:基于单视频的相机控制式生成渲染
  • 如何打造企业 DevOps 文化
  • LeetCode 第22~24题
  • Java学习------初识JVM体系结构
  • 【C++】 —— 笔试刷题day_6
  • 如何实现一个DNS