目录
一、C 语言思维导图
(1)数据类型
(2)运算
(3)控制结构
(4)过程式,模块化程序设计
(5)输入输出
(6)编码规范
(7)问题求解
二、C 语言的标准库
三、C 语言的编译过程
四、C 语言标准
五、C 语言的特点
六、C 语言的优点
七、C 语言的缺点
八、C 语言的应用
九、C 与 C++ 的区别
一、C 语言思维导图
(1)数据类型
(2)运算
(3)控制结构
(4)过程式,模块化程序设计
(5)输入输出
(6)编码规范
(7)问题求解
二、C 语言的标准库
C 标准函数库共有 29 个头文件
三、C 语言的编译过程
- 预处理 (Preprocessing) :预处理用于将所有的 #include 头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。
- 编译 (Compilation) :这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理之后的程序转换成特定汇编代码 (assembly code) 的过程;编译过程完成后,将生成程序的汇编代码
test.s
,这也是文本文件。- 汇编 (Assemble) :汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式;这一步会为每一个源文件产生一个目标文件,因此
mymath.c
也需要产生一个mymath.o
文件。- 链接 (Linking) :链接过程将多个目标文以及所需的库文件 (.so 等) 链接成最终的可执行文件 (executable file)。
四、C 语言标准
- C 语言标准是指 ISO(国际标准化组织)制定的规范,定义了 C 语言的语法、语义和库函数。
- 最早的 C 语言标准是于 1972 年由丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)创建的。
- 之后,C 语言标准经历了几次更新和改进,并于 1989 年发布了 ANSI C 标准(ANSI/ISO C)。
- 最新的 C 语言标准是 ISO/IEC 9899:2018,通常称为 C18,于 2018 年发布。
- 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 语言相对较为底层,需要程序员直接操作硬件资源和处理细节,因此开发相对繁琐,代码量较大。
缺少现代特性:相比现代编程语言,如 Python、Java、C++ 等,C 语言缺少一些现代特性,如垃圾回收、面向对象等,开发效率相对较低。
字符串处理困难:C 语言中的字符串处理相对繁琐,没有内建的字符串类型和操作函数,需要使用字符数组和指针来处理字符串,容易出现错误和代码冗余。
不足的标准库支持:虽然 C 语言拥有丰富的库支持,但标准库相对简单,缺少一些高级的功能和工具,需要依赖第三方库进行扩展。
可移植性限制:尽管 C 语言具有可移植性,但仍存在一些与平台相关的特性和不同编译器的差异,需要程序员注意处理这些问题才能实现真正的跨平台性。
学习曲线较陡峭:相比一些更高级的编程语言,C 语言的学习曲线较陡峭,对初学者而言,需要花费更多的时间和精力来理解和掌握其底层概念和编程范式。
八、C 语言的应用
C 语言广泛应用于各个领域,特别是在系统级开发和嵌入式系统中,尤其是在系统级和底层编程方面具有重要地位。下面列举一些常见的 C 语言应用:
操作系统:许多操作系统的核心是由 C 语言编写的,例如 UNIX、Linux、Windows 等。
嵌入式系统:C 语言在嵌入式系统开发中扮演重要角色,例如嵌入式设备、单片机、嵌入式控制器等。
驱动程序:C 语言用于开发硬件设备的驱动程序,与硬件交互并提供操作接口。
编译器和解释器:C 语言本身的编译器和解释器(如 GCC)也是使用 C 语言编写的。
网络编程:C 语言提供了丰富的网络编程库,使其成为开发网络应用程序和服务器的常用语言。
游戏开发:许多游戏引擎和游戏开发工具使用C语言进行底层开发,实现游戏逻辑和图形渲染。
数据库系统:C 语言广泛应用于数据库系统的开发,用于实现数据库管理系统(DBMS)和数据库驱动程序。
科学计算和数值分析:C 语言用于编写高性能的科学计算和数值分析程序,例如模拟、仿真和数据处理等。
虚拟机和解释器:C 语言在虚拟机和解释器的开发中起到关键作用,例如 JVM(Java虚拟机)就是使用 C 语言编写的。
系统工具:C 语言用于编写各种系统工具和应用程序,例如文本编辑器、编译工具、调试器等。
九、C 与 C++ 的区别
编程范式:C 语言是一种面向过程的编程语言,注重程序的执行顺序和函数的调用;而C++ 语言是一种多范式编程语言,不仅支持面向过程编程,还支持面向对象编程和泛型编程。
对象模型:C 语言没有内置的面向对象支持,而 C++ 语言提供了类(class)和对象(object)的概念,支持封装、继承和多态等面向对象特性。
类型检查:C 语言的类型检查比较宽松,较少的类型检查可以带来更高的灵活性;而C++ 语言对类型检查相对严格,可以提高程序的安全性和稳定性。
标准库:C 语言的标准库相对简单,提供了基本的输入输出和数学函数等;C++ 语言的标准库更加丰富,包含了大量的标准模板库(STL),提供了各种容器、算法和迭代器等。
异常处理:C 语言没有内建的异常处理机制,错误处理通常依赖于返回错误码;C++ 语言支持异常处理机制,可以更好地处理和管理错误。
内存管理:C 语言需要程序员手动管理内存,使用 malloc 和 free 等函数进行内存分配和释放;而 C++ 语言引入了自动内存管理机制,通过构造函数和析构函数自动管理资源。
扩展性:C++ 语言相较于 C 语言在语法和特性上更加丰富,提供了更多的语言扩展机制,如运算符重载、函数重载、命名空间等,使得程序可以更加灵活和可复用。
- 需要注意的是,C++ 语言是在 C 语言的基础上扩展和发展而来的,因此 C 语言代码可以直接在 C++ 中编译运行,且C语言的大部分特性仍然适用于 C++。同时,C++ 语言也可以使用 C 语言的库和函数。
- 总之,C 语言和 C++ 语言在编程范式、对象模型、类型检查、标准库以及内存管理等方面存在一些重要的区别,选择使用哪种语言取决于具体的应用需求和编程风格。