编程语言的实际应用场景(C语言场景)

从应用范围上来说,这些编程语言大致可以分为两种:

  • 一种是专用型语言,也就是针对某个特定领域而设计出来的语言;
  • 另一种是通用型语言,它们可以开发多种类型的应用程序,而不是局限在某个特定的领域。

专用型编程语言
在这里插入图片描述

通用型编程语言
在这里插入图片描述

C语言

一门通用性的语言,并没有针对某个领域进行优化,就目前而言,它可以进行以下几种类型的开发。
虽然C语言的开发场景看起来很多,但是如果总结一下的话,无非就是:底层/系统开发 +关键组件/模块的开发 + 贴近硬件的开发,这些开发场景非常关注运行效率,或者响应时间,或者硬件资源。

虽然C语言执行速度极快,占用资源极少,但是它使用起来非常麻烦,完全没有 Java、Python、Go、JavaScript、C# 等方便和灵活,会严重拖慢项目的开发进度,所以,通常只有在「不得不」的情况下才会使用C语言。

1) 单片机/嵌入式开发

单片机开发是嵌入式开发的一个分支,或者一个子集,或者一个分支

嵌入式开发两个方向:

  • 单片机开发:由于硬件资源有限,通常不使用操作系统,让代码跑在裸机上;或者,仅仅安装一个简单的实时操作系统(RTOS),比如 FreeRTOS、µC/OS、RT-Thread 等
  • 一个是基于复杂操作系统之上的开发,比如 Linux、Windows、Android 等。当然,这些操作系统都要针对嵌入式环境进行裁剪和优化,形成专门的嵌入式版本,以减少对资源的占用。这个才是通常所讲的嵌入式开发

家电(空调、自动洗衣机、遥控器),汽车(ECU发动机控制单元、BCU车身控制单元、车辆信息检测),医疗(心电图仪、血压仪、血糖仪、监护设备),智能卡(门禁卡、公交卡、银行卡),玩具(遥控汽车、摇摇椅)

2) 桌面软件开发

也叫 GUI 开发或者 PC 软件开发
在实际应用中,C语言通常用来开发某些关键模块或者效率模块,而不是开发一个完整的软件。这些模块一般对性能有着很高的要求,同时也关注资源消耗情况,除了C语言也没有其它更好的选择了。

当然,C语言也有一个比较完整和全面的 GUI 工具包,叫做 GTK。GTK 虽然使用C语言编写,但也提供了 C++、Python、Rust、JavaScript、Perl 等其它语言的接口。

【GTK 开源免费,跨平台,在 Linux 下比较常见,著名的 GNOME 和 GIMP 就使用 GTK 开发。】

Office早期版本使用C实现核心功能,PS早期版本使用C实现核心功能,CAD和3D建模软件使用C实现渲染和计算功能,Notepad++、Sublime Text使用C实现核心的编辑功能,MySQL Workbench和SQL Server Management Studio数据库客户端软件,使用C语言来实现数据库连接、查询、管理和界面。

开发一个完整的桌面软件,那么可以使用以下的解决方案/技术栈/技术选型(以 Windows 为例说明):

  • 基于 .NET 平台的 Windows Forms、WPF、UWP,可以使用 C#/VB.NET 编程
  • 基于 C++ 的 GUI 框架/库,比如 Qt、MFC、wxWidgets、GTK
  • 基于 Java 的 Swing、JavaFX
  • 基于 Python 的 Tkinter、PyQt
  • 基于 Web 技术(HTML、CSS 和 JavaScript)的 Electron 框架,VS Code、GitHub 客户端、Discord 就是用 Electron 开发
  • 基于 Dart 的 Flutter,跨平台,支持 Windows、Linux、macOS、Android、iOS、网站

3) 系统组件开发

基础组件、核心算法、硬件驱动、通信协议的实现

C语言底层开发举例:

  • 基础组件:文件系统、进程管理、用户界面(CLI+GUI)
  • 核心算法:加密/安全算法(MD5、SHA、AES、RSA、SSL)、调度算法(线程/进程调度、内存页面置换)、LZ压缩算法、CRC和海明码等数据校验算法、随机数生成算法(又细分为多种方式)
  • 硬件驱动:声卡驱动、显卡驱动、网卡驱动、蓝牙驱动、键鼠驱动、扫描仪/打印机驱动、USB驱动
  • 通信协议:TCP/IP协议族(UDP、DNS、路由选择)、HTTP/HTTPS、SMTP/POP3/IMAP、FTP、SNMP、Bluetooth、NFC

4) 开发操作系统

这是C语言的初衷,它就是为开发操作系统而生的,UNIX、Linux、Windows 的内核就大量使用C语言。

5) 开发其它编程语言

有些编程语言的编译器(解释器)和标准库就使用C语言开发,比如 Python、PHP、Rust、Perl。

有些编程语言是在C语言的基础上进行的扩展,比如 C++、Objective-C、Swift、D语言。

由于C语言具有可移植性,适应性强,有时也被用作不同编程语言的中间语言,这样不同编程语言之间就可以共享组件/模块。把C语言作为中间件的编译器有:

  • Gambit(Scheme语言的编译器和开发环境)
  • BitC(系统级编程语言)
  • GHC(Haskell语言的编译器)
  • Vala(基于C的语言,创建GNOME桌面程序)
  • Squeak(基于Smalltalk的面向对象编程语言)

6) 信号处理

C语言在电气工程领域也有很多用途,它可以使用信号处理算法来管理微处理器、微控制器等集成电路。

  • 无线通信中的调制和解调,包括数字调制解调、射频调制解调
  • 数字信号处理(DSP),包括滤波、频谱分析、时频分析、数字滤波器设计、谱估计

7) 音视频处理

C语言的速度非常快,能够快速地对音频和视频数据进行处理。音频和视频数据通常比较大,需要高效的算法和数据结构来处理,而C语言运行速度非常快,能够及时处理这些数据。

C语言提供了丰富的底层库和工具,如 FFmpeg、OpenCV 等,这些库和工具可以方便地对音频和视频数据进行编码、解码、剪辑、处理和转换等操作。

C语言支持指针和位运算等底层操作,这些操作可以对音频和视频数据进行高效的操作,如数据拷贝、移位、变换等。这些操作对于实现一些高级算法和数据结构非常有帮助。

  • 音频编解码:MP3、AAC、WAV
  • 视频编解码:H.264、H.265、VP9
  • 音频处理:音频滤波、均衡器、混响、降噪、语音识别、音频合成
  • 视频处理:图像滤波、色彩空间转换、运动估计、视频编辑
  • 媒体库:FFmpeg 和 OpenCV 可以用于编解码、格式转换、滤波、图像处理等

8) 数据库开发

数据库是软件领域的基础设施,它的性能直接影响整个应用程序的运行效率,所以必须使用一种高效的语言进行开发。

使用C语言开发的数据库有:MySQL、SQLite、PostgreSQL、Oracle Database、Microsoft SQL Server。

Python语言

开发工具

  • PyCharm
  • Sublime
  • VS Code

基本数据结构

  • 字符串
  • 列表
  • 元组
  • 集合
  • 字典

函数

  • 定义
  • 参数传递
  • 作用域
  • lambda表达式
  • 常用内置函数
  • 闭包
  • 匿名函数
  • 生成器函数
  • 装饰器
  • 高阶函数

模块

  • 文件处理(文件开闭,文件读写)
  • 日期时间
  • 导入模块
  • 常用模块

进阶

  • 正则表达式
  • 数据库编程(聚合、分组、关联、排序、数据库设计、数据库调优)

并发

  • 同步和异步
  • 阻塞和非阻塞
  • 多线程、多进程
  • 协程
  • 并发类库

网络编程

  • 网络基础(七层模型、IP)
  • 网络协议(TCP/UDP/HTTP/HTTPS/FTP/DNS)
  • WebSocket

web开发

  • Django框架(数据序列化、Django Rest Framework、分页缓存、信号、celery任务调度)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中科星图——LANDSAT_8/02/T1/TOA的Landsat8_C2_TOA类数据集

简介 数据名称: Landsat8_C2_TOA 数据来源: USGS 时空范围: 2020年1月-2023年3月 空间范围: 全国 数据简介: Landsat8_C2_TOA数据集是将数据每个波段的辐射亮度值转换为大气层顶表观反射率TOA,是…

如何解决缓存和数据库的数据不一致问题

数据不一致问题是操作数据库和操作缓存值的过程中,其中一个操作失败的情况。实际上,即使这两个操作第一次执行时都没有失败,当有大量并发请求时,应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步&#xff0…

【STM32 CubeMX】串口编程DMA+IDLE中断

文章目录 前言一、为什么要引入IDLE中断二、IDLE中断使用方式2.1 接收的三种情况2.2 函数的使用查询方式中断方式DMA方式分析一个问题 总结 前言 在嵌入式系统中,串口通信是一项关键的任务,而使用DMA(直接内存访问)结合IDLE中断进…

PLC_博图系列☞FBD

PLC_博图系列☞FBD 文章目录 PLC_博图系列☞FBD背景介绍FBD优势局限性 FBD 元素 关键字: PLC、 西门子、 博图、 Siemens 、 FBD 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软件。我并不是专业的PLC编程人员,也不懂电路…

CTFshow web(文件上传158-161)

web158 知识点: auto_append_file 是 PHP 配置选项之一,在 PHP 脚本执行结束后自动追加执行指定的文件。 当 auto_append_file 配置被设置为一个文件路径时,PHP 将在执行完脚本文件的所有代码后,自动加载并执行指定的文件。 这…

可视化锻炼日记ExerciseDiary

什么是 ExerciseDiary ? ExerciseDiary 是带有 GitHub 风格的年度可视化的锻炼日记。 安装 在群晖上以 Docker 方式安装。 在注册表中搜索 exercisediary ,选择第一个 aceberg/exercisediary,版本选择 latest。 本文写作时, lat…

云计算基础-大页内存

大页内存功能概述 什么是大页内存 简单来说,就是通过增大操作系统页的大小来减小页表,从而避免快表缺失 主要应用场景 主要运用于内存密集型业务的虚拟机,比如对于运行数据库系统的虚拟机,采用HugePages(大页)后,可…

ubuntu22.04@laptop OpenCV Get Started: 011_edge_detection

ubuntu22.04laptop OpenCV Get Started: 011_edge_detection 1. 源由2. edge_detection应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 重点逐步分析3.1 GaussianBlur去噪3.2 Sobel边缘检测3.2.1 SobelX方向边缘检测3.2.2 SobelY方向边缘检测3.2.3 SobelXY方向边缘检测 3.3 Canny…

PyTorch 快速安装 - 基于 JupyterHub 并运行 K8s

PyTorch 快速安装 - 基于 JupyterHub 并运行 K8s 运行 PyTorch 可以直接逻辑运行、容器中运行、KubeFlow 中运行以及基于 JupyterHub(独立运行或运行在 K8s 之上)等多种模式。这里介绍运行在 K8s 上基于 JupyterHub 的 PyTorch 方法,这也是运…

基于边缘计算的智能家居能源管理系统

一、项目背景 随着智能家居设备的普及,能源消耗问题日益凸显。为了更有效地管理家庭能源使用,减少浪费,并可能实现能源自给自足,我们提出了基于边缘计算的智能家居能源管理系统 该系统能够实时监控和分析家庭能源消耗数据&#xf…

MySQL的日志

一:概述 (1)介绍 在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件,MySQL也不例外。 (2)分类…

【精品】关于枚举的高级用法

枚举父接口 public interface BaseEnum {Integer getCode();String getLabel();/*** 根据值获取枚举** param code* param clazz* return*/static <E extends Enum<E> & BaseEnum> E getEnumByCode(Integer code, Class<E> clazz) {Objects.requireNonN…

CSS篇--transform

CSS篇–transform 使用transform属性实现元素的位移、旋转、缩放等效果 位移 // 语法 transform:translate(水平移动距离&#xff0c;垂直移动距离) translate() 如果只给一个值&#xff0c;表示x轴方法移动距离 单独设置某个方向的移动距离&#xff1a;translateX() transla…

林浩然与杨凌芸的Java时光魔法:格式化历险记

林浩然与杨凌芸的Java时光魔法&#xff1a;格式化历险记 The Java Time Odyssey of Lin Haoran and Yang Lingyun: A Formatting Adventure 在编程世界的一隅&#xff0c;有一个名叫林浩然的程序员。他是个Java大侠&#xff0c;对代码世界的法则了如指掌&#xff0c;尤其擅长驾…

用HTML和CSS打造跨年烟花秀视觉盛宴

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>跨年烟花秀</title><meta name"viewport" content"widthdevi…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-信号量semaphore

目录 一、信号量基本概念二、信号量运行机制三、信号量开发流程四、信号量接口五、代码分析&#xff08;待续...&#xff09;坚持就有收获 一、信号量基本概念 信号量&#xff08;Semaphore&#xff09;是一种实现任务间通信的机制&#xff0c;可以实现任务间同步或共享资源的…

[02] Vue指令(1)

目录 Vue中的常用指令内容渲染指令条件渲染指令事件绑定指令内联语句事件处理函数调用传参 Vue中的常用指令 概念&#xff1a;指令&#xff08;Directives&#xff09;是Vue提供的带有v- 前缀的特殊标签属性。 vue 中的指令按照不同的用途可以分为如下 6 大类&#xff1a; 内容…

Ubuntu学习笔记-Ubuntu搭建禅道开源版及基本使用

文章目录 概述一、Ubuntu中安装1.1 复制下载安装包路径1.2 将安装包解压到ubuntu中1.3 启动服务1.4 设置开机自启动 二、禅道服务基本操作2.1 启动&#xff0c;停止&#xff0c;重启&#xff0c;查看服务状态2.2 开放端口2.3 访问和登录禅道 卜相机关 卜三命、相万生&#xff0…

算法学习——LeetCode力扣二叉树篇7

算法学习——LeetCode力扣二叉树篇7 236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点…

揭开Markdown的秘籍:引用|代码块|超链接

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Markdown指南、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️Markdown 引用1.1 &#x1f514;引用1.2 &#x1f514;嵌套引用1.3 &…