首页 > 编程笔记 > C语言笔记

C语言到底是什么玩意?

C语言发布于 1972 年,今年是 2023 年,它已经 50 多岁了,是一个不折不扣的“大叔”或者“大爷”。

但是呢,现在的C语言依然非常流行,每一个科班出身的程序员都必学C语言。在 2023 年 10 月份发布的世界编程语言排行榜中,C语言拿了一个第二名的好成绩,占据了 12.08% 的市场份额。

第一名是 Python,占据了 14.82% 的市场份额,比C语言多一丢丢。

1972 年,一个叫丹尼斯·里奇(Dennis Ritchie)的程序员大佬,在美国著名的贝尔实验室中开发了C语言。C语言的初衷很简单,就是被设计成一种系统编程语言,帮助团队开发 UNIX 操作系统。

UNIX 可以说是现代操作系统的开山鼻祖,你所听说过的大部分操作系统都受到 UNIX 的影响,比如:

更多关于 UNIX 及其子孙后代的故事,我给出了一张高清大图,请猛击这里获取。

为了让初学者更加精准地理解C语言,这里我们不妨给C语言贴几个标签。

标签1:中级语言

很多教材都把C语言定位成高级语言,但是从现在的编程环境来看,这种说不再准确了。C语言最好的定位应该是中级语言。

第一,C语言比较简单,它的语法特性并不丰富,不支持面向对象,不支持泛型编程,不支持函数编程,而 Java、Python、C#、JavaScript 等高级语言,至少支持其中的两种。

语法特性多了,开发起来就比较方便,维护大型项目也更加得心应手。

第二,C语言语法严格,编写C语言代码需要非常小心,稍微不注意就会出错,比如指针。而 Python、JavaScript、PHP 等高级语言,代码书写非常灵活,基本不太关注细枝末节,死扣那些和项目功能无关的边边角角。

语法要求严格的话,就会耗费过多精力,写起代码来效率就低。

第三,C语言不支持垃圾内存回收,需要自己管理内存,实在是太麻烦了,一不小心就会出现内存错误,比如内存泄露(Memory leak)、段错误(Segmentation fault)等。

虽然有一些工具可以帮助检测类似的问题,比如 Valgrind、ASan 等,但是这些工具使用起来也非常麻烦,还需要了解很多底层知识,初学者或者半吊子程序员是玩不了的。更要命的是,工具也不是万能的,总有一些不常见的内存问题是无法检测的。

内存问题,是 C/C++ 程序员最头疼的问题。

第四,使用C语言开发对程序员的要求很高,程序员需要对计算机底层的执行细节有更深入的了解,比如内存布局、编译原理等,所以基础不扎实的程序员压根就玩不了C语言。

总起来说,C语言在使用的灵活性和强大型方便,比不过 Java、Python、C#、JavaScript、PHP 等语言,所以它不高级;但是,C语言又比汇编好用太多了,简直不是一个时代的产物,所以它也不低级。

既不高级也不低级,那就算是中级语言吧。

标签2:通用语言

根据世界编程语言排行榜(TIOBE)的统计,能叫得上名字来的编程语言大概有 300 多种,其中常用的有 50 种,也就是榜单里面的前 50 名。

从应用范围上来说,这些编程语言大致可以分为两种:
专用型编程语言举例:
编程语言 说明
PHP 专门用来开发网站后台。
JavaScript 最初只能运行在浏览器里面,用于开发网站前端,实现一些网页特效;后来有“好事的”程序员把它从浏览器里面提取出来,拿到操作系统上直接运行,这个时候 JavaScript 又变成了一种通用型的语言,可以干很多其它事情了,比如开发网站后来、GUI 程序、APP 或者一些小工具。
SQL 专门用于操作数据库的语言,可以实现数据的增删改查。
MATLAB 主要用于数值计算、科学计算和数据可视化等领域。它提供了许多工具箱,可以进行信号处理、图像处理、控制系统设计等任务。
R语言 用于统计分析和数据科学,是一种开源的语言和环境,提供了许多数据分析和可视化的函数和工具。
VHDL/Verilog 用于数字电路设计,是一种硬件描述语言。它们允许开发人员描述数字电路的行为和结构,并用于电路仿真和综合等任务。

通用型编程语言举例:
编程语言 说明
Python 能做的事情很多,可以用于科学计算、数据分析、Web开发、网络爬虫、人工智能、自动化运维等领域。
Java 可以用于网站开发、Android APP开发、GUI 程序开发、云计算等领域。
Objective-C
Swift
开发苹果系统上的应用程序,具体包括 iOS、macOS、watchOS、iPadOS 等。
Go语言 Google 公司开发,可以用于网络编程、云计算、分布式系统开发、Web后台开发、游戏后台开发、GUI程序开发等领域。
C/C++ 用于底层开发、单片机/嵌入式开发、游戏开发、GUI 程序开发等。

标签3:高效语言

C语言先被“翻译”成汇编代码,然后再由汇编器编译成机器代码,也就是 0 和 1 组成的那一堆东西。

C语言语法特性并不丰富,不支持那些高级的玩法,没有乱七八糟的语法糖,什么东西都得由你自己实现,所以C语言生成的汇编代码比较简洁,比直接手写汇编代码也复杂不了多少。

因为简单,因为原始,所以运行效率高,而且是极高,比汇编也差不了多少,所以在很多场景下都可以代替汇编的工作。

C语言的运行效率,不是 Python、Java、JavaScript、C#、PHP 这些高级语言所能比肩的,它们之间甚至会存在数量级的差距。

总结

C语言是一种高效的、通用的中级语言。

C语言是一名合格的程序员必须掌握的编程语言,很少有不了解C语言的大佬。

C语言除了能让你学习编程相关的概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的“爱恨情仇”,这些底层知识决定了你的发展高度,也决定了你的职业生涯。

如果你希望成为出类拔萃的人才,而不仅仅是码农,这么这些知识就是不可逾越的。也只有学习C语言,才能更好地了解它们。

声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。