一 、C是什么
C 语言是通用编程语言,1972 年为 UNIX 系统而生,系统本身、配套软件几乎全用 C 写;但它不绑定 UNIX,任何电脑 / 系统都能用。常被叫做 “系统级语言”,既能写操作系统、编译器,也能做各类普通软件。
C的前身是 B 语言(BCPL),B、BCPL 是无数据类型语言,C 新增了完整数据类型体系。
二 、核心特性
1 )丰富的数据类型
相比它的前辈B语言,它增加了丰富的数据类型。
基础类型:字符、多种大小的整数、小数(浮点数)
衍生类型:指针、数组、结构体、共用体;依靠指针可以直接操作内存地址,不受硬件限制
规则:运算符拼接就能组成表达式,赋值、函数调用这类表达式都能单独当作一句代码
2 )完整程序流程控制
判断(if-else)、多分支选择(switch)、两种循环(while/for 先判断再执行、do 后判断再执行)、提前跳出循环(break)等等。这些流程控制语句,可以使得你的代码逻辑变得更加丰富。
3) 函数
函数就是一套打包好的固定操作流程,给它起个名字,想用的时候喊名字,它就自动做完一整套事。
举生活例子:
如果“烤面包” 是一个函数。
不用每次烤面包都重复一遍:和面→做包子→烤面包。
只要喊一句 “烤面包”,整套步骤自动执行,这就等于调用函数。
当你想靠两次面包,只需要调用两次“烤面包” 这个函数就可以。
如果放到 C 语言里:
printf这个函数,打包了 “把文字显示到屏幕上” 的全套操作。你只需要写printf("你好"),不用自己一步步操控电脑屏幕。
函数能返回数字、结构体struct、指针等各类数据
支持递归调用(自己调用自己) 函数内的局部变量每次调用都会重新创建;函数不能嵌套定义,但变量可以在代码块内单独声明
项目代码可以拆分到多个.c文件分开编译;
变量分三种作用域:仅函数内部、单个文件内全局、整个程序全部可见
4 预处理器
代码编译前会先执行预处理:批量替换文本宏、导入其他代码文件、选择性编译部分代码。
所谓预处理,就是编译器提前对一些不属于语言的一部分进行事前处理,处理后再执行编译,为什么有些不属于语言的呢?因为为了方便程序员开发,提高效率,有些东西,可以使用宏。等后面我们学到了,大家就会理解了
三、 偏底层的简洁语言
这里说的底层,不是贬义词,它只处理电脑原生基础数据:字符、数字、内存地址,直接使用硬件自带的运算逻辑,运行效率极高。
也就是,它可以处理计算机更底层的东西,相对一些其他的语言,C语言可以操作内存地址,甚至硬件都可以。
语言本身功能极简,复杂能力靠库函数实现
C 语言原生没有内置字符串、数组、集合、文件读写、输入输出功能:
不能一次性直接操作整个字符串 / 数组;只有结构体允许整体复制
没有自动内存管理、垃圾回收,内存需要手动控制
没有read/write读写关键字,打印、读取输入全靠调用库函数
只支持单线程基础流程,不自带并发、同步、协程能力
所谓库,也就是其他人用C语言或者其他语言写好的函数的集合。你可以调用这些库来完成一些功能,可以避免重复造轮子。
虽然很多功能要手动调用函数,但语言本身很小、规则少,很好学,开发者能完整吃透整套语法。
四、 C 语言标准化:ANSI C(1988)
所谓标准化,就是C语言一开始很多人用,很多公司也有自己的定义,这样就无法统一了,为了标准,有一个机构负责标准化,也就是大家统一这样,顶一个规则。就好比我们的USB接口一样,或者插座的规格,有机构负责统一规范。
ANSI = American National Standards Institute
解析
就是:美国国家标准学会,它是美国一个民间标准化组织,不生产软件、不写代码,专门负责给各行各业制定统一规范(工业、电子、计算机、语言标准都管)
什么是 ANSI C?
在 1983 年,ANSI 专门成立小组统一规范 C 语言语法,1988 年正式发布一套 C 语言官方标准,这套标准就叫 ANSI C(也叫 C89)。
五、 ANSI 标准配套:标准库
新增一套统一标准库,提供文件读写、格式化输入输出、内存分配、字符串处理等通用功能,搭配统一头文件使用。
C 语言语法本身非常简陋,只提供变量、判断、循环、函数、指针这类基础代码规则,没有自带打印文字、读取键盘、读写文件、计算数学、处理字符串的功能。
ANSI C 配套规定了一套全世界编译器统一、跨系统通用的工具函数合集,这就是标准库。
调用的方式:通常是用 #include xxx.h 引入头文件,就能直接使用库函数。
例如:
#include <stdio.h> //输入输出库,提供 printf(打印)、scanf(读取输入)
#include <stdlib.h> //内存分配、程序退出、随机数
#include <string.h> //字符串复制、比较
#include <math.h> //sin、sqrt 等数学计算Code language: HTML, XML (xml)
在 ANSI 标准出现前: UNIX 的打印函数、Windows 的打印函数写法不一样,代码换系统执行就报错。而标准库出来后,只要你写 printf("hello"),Windows / Linux / Mac 全部通用,不用改代码。这样就大大方便了程序员了。同时也促进了C语言的发展。
标准库是用什么开发的?
大部分功能:是用 C 语言实现的,当然也又少部分用到汇编等
像字符串拷贝 strcpy、数学计算、内存复制这类不直接操作到硬件的函数,几乎全部由纯 C 代码编写。
有一部分操作需要和操作系统、硬件打交道的,C 语言做不到,必须配合其他语言,例如最常用的汇编语言。
六、可移植性与类型安全
相同一份代码,你只需要稍加修改,甚至不改,可以拿到不同的操作系统下面编译,编译后出来的程序,就可以运行再这个操作系统上面了。
最后,经过上面的理解,相信大家对C语言有一定了了解了,如果你还不了解,也没关系,其实单靠文字描述,的确很难懂,后面我们学习,通过例子慢慢深入,你就会明白上面的意思了。