【C++】C 语言与 C++ 语言的关系 ( C 语言发展 | C 语言缺陷 | C 语言 + 面向对象 + 高级语言特性 | C++ 语言增加内容 | C 语言与 C++ 语言应用场景 )

2023-08-17 20:00:00





一、C 语言发展



C 语言 被开发之前 并 没有经过 缜密 的 设计 , 而是在 使用过程中 逐渐完善的 ;

C 语言发展经过如下阶段 :

  • 初始阶段 : 1972年至1978年 , C语言 初步形成 , 主要用于 UNIX 操作系统的开发 ;
  • 发展阶段 : 1978年至1988年 , C语言成为主流的编程语言 , 加入了 stdio.h , stdio.h , stdlib.h , string.h 等标准库 , 功能得到了极大的增强 ;
  • 成熟阶段 : 1988年至1998年 , C语言成熟,推出 C语言标准和规范 , 如 : ISO/IEC 9899 ;
  • 现代阶段 : 1998年至今,C语言 推出 C99 , C11 , C17 等标准 , 以满足新的编程需求 ;




二、C 语言缺陷



C 语言有如下缺陷 :

  • C 语言 没有经历过 缜密的 设计过程 , 都是根据需求逐渐完善的 , 出现了很多缺陷和漏洞 ;
  • C 语言 在开发时 , 有很多 " 灰色地带 " , 稍不注意就会产生无法排查的问题 , 如 : 内存的管理 - 分配和释放内存 , 指针操作 - 野指针 , 类型转换时精度损失 , 并发死锁 等问题 ;
  • C 语言 有很多 " 低级语言的特征 " , 如 : 可以直接访问内存 , 没有垃圾回收机制 , 需要手动管理内存 , 可以直接访问硬件 - 读写端口 / 控制中断 ;
  • C 语言 直接 通过 " 指针 " 操作 " 内存 " , 造成了很多不可排查的错误 , 如 : 野指针 ;

尽管 C 语言有上述缺陷 , 但是 C 语言有一个优势 , 那就是 执行效率 非常高 ;





三、C 语言 + 面向对象 + 高级语言特性




1、C 语言衍生的高级语言


鉴于 上述 面向过程 的 C 语言 的 设计缺陷 ,

C 语言 的基础上 , 引入 面向对象 设计方法 , 同时加入 高级语言特性 , 开发出了 高级面向对象 语言 , 如 :

  • Objective-C , 主要用于 Mac 软件和 iPhone / iPad 软件开发 ;
  • C++ , 用途广泛 , Windows / Linux 都可以使用 C++ 语言 ;

2、C 语言与 C++ 语言关系


C 语言 与 C++ 语言 并 不是 竞争关系 ;

C++ 语言 是 以 C 语言为基础 的 加强版本编程语言 , 可以看作是更好的 C 语言 , 在 C++ 语言 中 , 可以使用 C 语言语法 , 对 C 语言完全兼容 ;

C++ 语言 包含 C 语言 , 在 C++ 代码中可以使用 C 语言的语法 , 但是在 C 语言中不能使用 C++ 的语法 ;


3、C++ 语言增加内容


C++ 语言 在 C 语言基础上 :

  • 增加了 面向对象 支持 ;
  • 进行了 类型加强 ;
  • 进行了 函数加强 ;
  • 增加了 异常处理机制 ;
  • 增加了 STL 特性 ;

4、C 语言与 C++ 语言应用场景


C 语言 和 C++ 语言的应用场景 :

  • C语言 应用场景 : 系统软件、操作系统、编译器等 底层系统级应用 ;
  • C++ 语言 应用场景 : 大型应用程序、游戏 等更 高级的应用 ;

在不同的 需求场景 中 , 选择合适的编程语言 ;

更多推荐

前后端分离管理系统day01---Springboot+MybatisPlus

目录目录软件基础知识一创建后端项目注意:删除多余项创建测试类二加入mybatis-plus依赖支持1.加入依赖码2.创建数据库实例/创建用户表/插入默认数据创建数据库实例创建表插入数据3.配置yml文件注意:wms01必须是数据库的名字,后端手动配置端口8090,防止前端访问8080时和后端冲突4.编写测试代码①创建e

RabbitMQ生产故障问题分析

1.问题引发由某个服务BI-collector-xx队列出现阻塞,影响很整个rabbitMQ集群服务不可用,多个应用MQ生产者服务出现假死状态,系统影响面较广,业务影响很大。当时为了应急处理,恢复系统可用,运维相对粗暴的把一堆阻塞队列信息清空,然后重启整个集群。在复盘整个故障过程中,我心中有不少疑惑,至少存在以下几个问

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域:1、编程建议和示例代码:无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。2、数据可视化:生成各种类型的数据可视化图表,如折线图、柱状图、散点图、饼图、热力图等。提

Python中两个最常用的单元测试框架unittest和pytest

这篇文章的主要目的是讨论Python中两个最常用的单元测试框架unittest和pytest,它们的优缺点以及在何时选择哪个框架。PythonunittestvsPytest在编写任何软件时,我们必须在开发过程中保持错误检查的过程。这确保了一旦软件达到发布阶段,在使用过程中遇到的错误数量最小。Python也有各种测试框

北京君正应用案例:联想新款Yoga Book 9i亮相 CES

国际消费电子展(CES),被誉为年度消费电子行业“风向标”。在今年CES2023上,联想旗下多款创新产品正式亮相,带来最前沿的趋势与技术体验。特别是新款YogaBook9i的发布,采用了双面13英寸OLED屏的设计,可以一起用作大型平板电脑,也可以与可连接的蓝牙键盘配对,用作双屏笔记本电脑。YogaBook9i能够帮助

Vue2+ElementUI 静态首页案例

源码<template><divclass="app-containerhome"><el-rowtype="flex"justify="space-around"class="row-bg"><el-cardclass="box-cardcardDiv1"><el-col:span="5"><divclass="bo

第一百五十回 自定义组件综合实例:游戏摇杆一

文章目录概念介绍实现方法示例代码我们在上一章回中介绍了自定义组件相关的内容,本章回中将综合使用这些内容自定义游戏摇杆组件.闲话休提,让我们一起TalkFlutter吧。概念介绍我们介绍的游戏摇杆就是一个内层的小圆嵌套一个外层的大圆,大圆的位置不变,小圆只能在大圆所在的范围进行移动,它移动的角度是360度,因此在游戏中使

LeetCode算法心得——连续数组(前缀和+HashMap)

大家好,我是晴天学长,公式的巧妙化简加上hashmap的灵活应用,需要的小伙伴可以关注支持一下哦!后续会继续更新的。1).连续数组给定一个二进制数组nums,找到含有相同数量的0和1的最长连续子数组,并返回该子数组的长度。示例1:输入:nums=[0,1]输出:2说明:[0,1]是具有相同数量0和1的最长连续子数组。示

C语言程序设计(第五版)书上习题及课后习题与答案汇总(只涉及程序编写部分)--持续更新

课后例题推荐B站视频:https://www.bilibili.com/video/BV1ih411y7gN第一章程序设计和C语言书上例题1.求两个整数之和#include<stdio.h>intmain(){inta,b,sum;a=123;b=456;sum=a+b;printf("sumis%d\n",sum);

[python 刷题] 242 Valid Anagram

[python刷题]242ValidAnagram题目:Giventwostringssandt,returntrueiftisananagramofs,andfalseotherwise.AnAnagramisawordorphraseformedbyrearrangingthelettersofadifferent

探索智能应用的基石:多模态大模型赋能文档图像处理

目录0写在前面1文档图像分析新重点2token荒:电子文档助力大模型3大模型赋能智能文档分析4文档图像大模型应用可能性4.1专有大模型4.2多模态模型4.3设计思路总结0写在前面中国智能产业高峰论坛(CIIS@2023)旨在为政企研学各界学者专家提供同台交流的机会,在成果分享、观点碰撞、经验互鉴中,共促智能科技引领行业

热文推荐