编程语言的实际应用场景(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。

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

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

相关文章

LMDrive: Closed-Loop End-to-End Driving with Large Language Models

论文链接:https://arxiv.org/pdf/2312.07488.pdf 代码链接:https://github.com/opendilab/LMDrive 1. 摘要(Abstract) 尽管自动驾驶领域最近取得了重大进展,但当遇到长尾不可预见事件和具有挑战性的城市场景时&#xf…

构建智慧交通平台:架构设计与实现

随着城市交通的不断发展和智能化技术的迅速进步,智慧交通平台作为提升城市交通管理效率和水平的重要手段备受关注。本文将探讨如何设计和实现智慧交通平台的系统架构,以应对日益增长的城市交通需求,并提高交通管理的智能化水平。 ### 1. 智慧…

协调尺度:特征缩放在机器学习中的重要作用

目录 一、介绍 二、背景知识 三、了解功能缩放 四、特征缩放方法 五、特征缩放的重要性 六、实际意义 七、代码 八、结论 一、介绍 特征缩放是机器学习和数据分析预处理阶段的关键步骤,在优化各种算法的性能和效率方面起着至关重要的作用。本文深入探讨了特征缩放的…

Kotlin基本语法2基本内置方法

1.Kotlin的可空性 fun main() {var str:String? "butterfly" //?问好代表可空类型str null } 安全的管理 1.1 安全操作调用符 fun main() {var str:String? "butterfly" //?问好代表可空类型str nullprintln(str?.capitalize())//当String为null时…

找不到目标和方向,怎么办?

现代社会里,许多人常见的症状,就是「空心病」。 什么是空心病呢?类似这样: 我知道要有目标,但我就是不知道想做什么,感觉对一切事物都提不起兴趣,没有动力,怎么办? 这个…

京东护网面试题汇总

1 、JNI 函数在 java 中函数名为 com.didi.security.main,C 中的函数名是什么样的? com_didi_security_mian java.com.didi.security.main 2 、Frida 和 Xposed 框架? 3 、SSRF 利用方式? 4 、宏病毒? 5 、APP 加壳&a…

Qt:自定义信号,信号emit,传参问题,信号槽与moc

一、自定义信号,信号emit 1、自定义信号 在头文件中 加入signals: 就可以编写信号 2、emit emit的作用是通知信号发生 二、跨UI控件传参 每次按Dialog添加按钮主控件数字会增长 // .h private slots:void on_btnAdd_clicked(); signals:void sign…

新时代异步 IO 框架:IO_URING 的原理、用法、业界示例分析

文章目录 IO_URING基本介绍常见 I/O 模型IO_URING 原理核心结构工作模式高级特性 用法APIliburing基本流程Demo 业界示例SeaStar / ScyllaDBCEPHRocksDBClickHouse IO_URING 基本介绍 常见 I/O 模型 当前 Linux 的几种 I/O 模型: I/O 模型 同步 I/O 是目前应用最…

每日一练:LeeCode-98、 验证二叉搜索树【二叉搜索树+DFS】

本文是力扣LeeCode-98、 验证二叉搜索树【二叉搜索树DFS】】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&am…

LeetCode 每日一题 Day 62 - 75

1686. 石子游戏 VI Alice 和 Bob 轮流玩一个游戏,Alice 先手。 一堆石子里总共有 n 个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。 给你…

基于MQTT协议的消息代理软件(Mosquitto)介绍与应用

文章目录 一、Mosquitto是什么二、Mosquitto的特点三、Mosquitto常用命令四、Mosquitto的主要应用场景五、Mosquitto的下载与安装六、Mosquitto如何使用 一、Mosquitto是什么 Mosquitto是一个开源的消息代理软件,它实现了MQTT(Message Queuing Telemetry…

OTA升级时序

ECU启动时序 在上电/复位后, ECU 执行 Bootloader 程序。 Bootloader 程序首先执行一些基本的初始化,然后检查外部编程请求标志位是否置为 TURE。如果外部编程请求标志位置为 TURE,即使应用程序是有效的,Bootloader 程序 也会继续…