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

news/2025/3/20 3:47:36/

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.ppmy.cn/news/1580489.html

相关文章

鸿蒙Next与API 12深度解析:架构、开发实践与代码示例

文章目录 1. 鸿蒙Next核心架构1.1 系统架构演进 2. API 12关键特性2.1 分布式能力增强2.2 ArkUI增强特性 3. 开发环境配置3.1 工具链升级3.2 工程结构 4. 核心开发模式4.1 元服务开发流程4.2 跨设备调用示例 5. 性能优化实践5.1 渲染优化技巧5.2 内存管理最佳实践 6. 安全增强特…

如何在 Github 上获得 1000 star?

作为程序员,Github 是第一个绕不开的网站。我们每天都在上面享受着开源带来的便利,我相信很多同学也想自己做一个开源项目,从而获得大家的关注。然而,理想很丰满,现实却是开发了很久的项目仍然无人问津。 最近&#x…

Redis的消息队列是怎么实现的

Redis 本身并不是一个专门的消息队列系统,但它的 List、Pub/Sub 和 Stream 数据结构可以用来实现消息队列的功能。以下是 Redis 实现消息队列的几种常见方式: 1. 基于 List 实现消息队列 Redis 的 List 是一个双向链表,支持在头部和尾部进行高效的插入和删除操作,非常适合…

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下: eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…

[从零开始学习JAVA ] 泛型

前言: 本文将详细介绍之前我们在JAVA 中一直在讲的泛型,各位感兴趣的同学可以点击进来观看。 泛型: 泛型是一种编程概念,它允许在定义类、接口或方法时使用类型参数,这样可以在使用时指定实际的类型。通过使用泛型&a…

微软开源神器OmniParser V2.0 介绍

微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具,旨在将用户界面(UI)截图转换为结构化数据,从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型&#xf…

vue-router实现

实现一个简化版的 vue-router 可以帮助我们更好地理解 Vue 路由是如何工作的。Vue Router 主要的功能是基于浏览器的 URL 来管理组件的显示,能够根据 URL 变化切换不同的视图。下面是一个简化版的实现,用于帮助你理解基本的路由机制。 创建一个简单的 V…

Api架构设计--- HTTP + RESTful

Api架构设计--- HTTP RESTful 什么是RESTfulRESTful 设计原则RESTful 接口类型RESTful 状态码RESTful Uri设计原则Api传参:QueryString 和 UriPath RESTful和HTTP的区别注意事项 什么是RESTful RESTful(Representational State Transfer)是一…