目录
前言
C语言中常见的关键字总共有这么些
下面将对部分关键字进行附加解释
auto
自动的,所有的局部变量都等于自动变量
break
停止,用在循环中
case
switch case语句
char
属于一种类型
const
用来修饰指针,变量,
continue
继续,用于循环
default
switch语句里的默认选项
do
do while 循环
double
属于一种类型
short
属于一种类型
int
属于一种类型
long
属于一种类型
long long
属于一种类型
float
属于一种类型
else
if else语句
enum
自定义类型,枚举
extern
用于声明外部符号
for
for循环
goto
goto语句
register
寄存器关键字
return
函数中的返回
signed
有符号的
unsigned
无符号的
这种变量只能放正数,放复数也会被处理成正数对待
sizeof
用来计算类型或者大小的
static
用来修饰变量的
struct
结构体(自定义类型)
union
联合体/共用体(自定义类型)
typedf
类型重定义
viod
无类型,空类型,一般用于函数返回值,参数
while
while循环
关键字typedef
类型重命名
比如我们要定义一个无符号的整型
但名字太长,不好写,我们就用typedef重定义
从此 unsigned 可以用 unit 代替
寄存器关键字regrested
寄存器是计算机上的一种储存设备
由下到上,速度越来越快,空间越来越小
cpu - 中央处理器,数据从内存中拿出来放到cpu进行处理,早期内存读写速度和cpu处理速度匹配,随着技术的发展cpu处理越来越快,内存的读写速度却跟不上,由于更高读写速度的内存造价高,就有了高速缓存和寄存器。
设计就变成了,cpu在寄存器中拿数据进行处理,内存的数据往高速缓存里放,高速缓存的数据往寄存器里放,当cpu把寄存器中的数据拿完后才回去高速缓存和内存中拿,这样计算机整体的计算速度就提升了
于是就有建议将数据放到寄存器中的代码
这段代码就是建议计算机将10放在寄存器中,并没有强制将数据放在寄存器中的代码
关键字static
1、修饰局部变量
首先先看一个代码
关于这个代码,由于变量 a 的生命周期就是test函数,所以每当test函数被调用时,a 就会被创建并赋值为1再++,最后打印,当test函数结束后,a 就会被销毁 ,i++,由于 i 还是小于10,所以又会重新调用test函数,而上次创建的局部变量 a 已经被销毁,a 又会重复上述步骤,然后再返回main函数直到 i
等于10后,函数运行结束。
所以打印结果是10个2
当局部变量 a 被static修饰后
当static修饰变量 a 后,a就变成了静态的局部变量,打印过后也不会销毁,所以 a 的值会越来越大
原理:static 修饰局部变量变量时改变了变量的存储类型
内存一般会划分为这3个区
变量 a 原本是局部变量,应放在栈区,被static修饰后储存位置改变为静态区,而放在静态区的变量的生命周期与程序的生命周期一样,出了作用域依然不销毁,只有程序结束,他们的生命才会被回收
结果变量 a
生命周期:变长了
作用域:不变
2、修饰全局变量
在当前源文件下新建一个文件,在这个文件内部创建一个全局变量。
在原来的文件中创建函数打印时却发现无法打印
其实只需要声明一下这个全局变量,即可运行成功
这里的 extern 是用来声明外部符号的
当我们用static修饰这个全局变量时再运行代码,就会发现无法运行
存在未定义的变量
原因是:众所周知,一个代码需要经过 编译 + 链接 生成可编译程序 exe 文件 代码才会运行。
而我们的全局变量是具有外部连接属性的,static修饰全局变量的时候,这个全局变量的外部连接属性就变成了内部连接属性,这个全局变量只能再自己所在的.c文件中看到,其他源文件看不到了。
3、修饰函数
先在新创建的文件中新建函数,再在旧文件中创建main函数,并声明新文件中的函数再运行。
随后再用 static 修饰新函数,就会无法运行
原因:函数本身是具有外部连接属性的,如果static修饰函数,那么这个函数的外部连接属性就变成了内部连接属性,这个函数只能再自己所在的源文件内部使用,其他源文件无法使用该函数。
最后,我们再来了解一个额外的知识 define,这个先仅仅有个概念就行
define定义的常量和宏
这个就是define定义的常量
define定义的宏,宏和函数的结构较相似,也拥有参数