一 关键字
关键字:C语言'内置'关键字,'直接'拿来使用
了解关键字'目的'
1. 自定义变量名不要'冲突'
2. 关键字的'作用'和'适用场景'
① auto
局部变量、'自动变量'-->省略'auto关键字'
细节: 自动'创建'和'销毁'
② continue、break
1) switch while for 循环 -->'break'、'continue'
2) case -->'break'
③ extern
引入'外部[其它文件中]'符号-->'变量'、'函数'
④ goto
说明: 在'c/c++'开发中基本不用了,但是在'内核'中还是有该'用法'
goto语句又叫'无条件转移'语句
场景: 条件'逻辑'判断
⑤ register
寄存器'关键字' --> '类别' --> 皇帝身边的'小太监'
++++++++++数据'存储'地方++++++++++
1) 硬盘;
2) 内存;
3) 高速缓存'cache'-->32M
4) 寄存器-->'有限个[十几个]'
'金字塔'形状:访问速度'越来越快'、单'越来越贵',所以容量
备注:寄存器的数据'也来自'高速缓存中,如果没有,则从'高速缓存'中拿
CPU处理数据速度越来越快,内存的访问速度跟不上 -->整体性能'也不行'
CPU:中央处理器-->'运算';CPU从内存中拿数据
register int a =10; '建议(编译器自行判断)'定义成寄存器变量-->'场景:频繁使用;比较重要'-->寄存器数量是有限
⑥ 无符号和有符号
1. signed int -->前面'默认(default)省略'-->'有符号'
等价:'int'
2. unsigned int -->'无符号整形'-->'没有+、-'区分-->[0,2^n-1]
⑦ typedef
细节: include/linux/kernel.h是'内核的包'中
typeof关键字是'C语言'中的一个'新扩展',这个特性在linux'内核中'应用非常'广泛'
1) 类型定义: 类型'重定义'
2) 定义新的类型来'代替'已有的类型
3) typedef 语句的'一般形式'
typedef '已定义'的类型 '新'的类型;
4) typedef的最'常用'的作用就是给'结构体变量重命名'-->'后续讲解'
说明: 关于'其它'用途'后续'讲解
typedef unsigned int u_int; -->'别名(alias);小名'
1)static修饰局部变量
测试: 单步'代码调试'看'效果'
结论: static修饰'局部'变量,局部变量的'生命周期变长';'作用域不变[只能函数内部访问]'
细节: static导致'第一次被初始化',后续的a就是'全局栈'的,'不会再进行'初始化
补充: 静态局部变量'存储于'进程的'全局'数据区,即使'函数返回',它的值也会'保持不变',不能被'作用域'之外的'访问'
2)static修饰全局变量
1. 普通'全局'变量'穿上'static外衣后,它就变成了'新娘',已心有所属
2. 只能被定义它的'源文件(新郎)'中的变量或函数'访问'
备注: 使用extern关键字->声明'外部符号',使用其它文件的'全局变量'
思考: 为什么加了'static',全局变量就'不能'访问了?
原因:'全局变量'加上static,改变的是'作用域'
效果: 让'静态的全局变量'只能在自己所在的'源文件内部'使用
闭包就是利用'嵌套函数'这种形式,对于自己'作用域之外'的'变量'进行'操作'
后续面向'对象'的闭包-->lua、groovy'特性'
3)static修饰函数
+++++++++++++++'对比实验'+++++++++++++++
'报错':找不到add符号
1) static修饰函数'改变了'函数的作用域-->'通俗理解'
2) static修饰函数改变了函数的'链接'属性-->'准确'
static修饰函数之后-->'外部'链接属性 -->变成'内部链接'属性,限制'作用域'
⑨ define定义'常量'和'宏'
1) 定义'标识符常量'
#define MAX 10
⑩ 杂乱
struct -->'结构体'关键字
union -->'联合'/'共用'体
volatile -->后期'讲操作系统会讲'-->'C语言断位'
void -->'无',函数'没有'返回值
业务网络和管理网络