C语言一些关键字学习

一、 volatile

volatile英文意思是易变的,易怒的。
int i;//一般变量的定义。
volatile int i;//在变量定义的时候,在定义前加volatile,表示这个变量是易变的,告诉编译器不能随便优化。
对于单纯的int i;执行for (i=0;i<100;i=i+1)时,编译器先将i读到cpu,保存到cpu空间,然后执行i=i+1时,为了提高运行速度,不从内存读取i的值,而是从cpu读取,执行完所有的累加后(100次),将累加和写入到内存。操作速度非常快。

对于volatile int i;执行for (i=0;i<100;i=i+1)时,编译器先将i读到cpu,然后执行i=i+1,再将累加结果写到内存,这样的操作执行100次。这样的操作确保每一步都成功,效率非常低。

对于跟硬件相关的寄存器,比如cpu读取外部gpio的值时,如果不加volatile,cpu上电后先将寄存器读取到cpu,后续的操作也是从cpu读取的,而不是从内存读取的,这样子导致当外部硬件状态发生变化后,读取的值还没有发生变化。所以跟硬件相关的寄存器一定要加volatile,确保cpu读取每次从内存进行。这样子当外部硬件状态发生变化时,cpu读取的值夜立即发生变化。

二、 constant

volatile constant int pi=3.1425926; 加constant的意思是i变量是个常量,不可被外部修改,否则编译器报错。同时它的值存放在flash上,减少内存耗费。

三、 static

一个大的项目有多个成员在参与,最后将所有的人工程代码集成在一起。比如甲在工程中定义了一个变量int i;乙在工程中同样定义了一个int i;这样子工程集成在一起时候就会报错。比如甲在定义变量时定义成static int i;乙定义变量时为int i。这样子不会报错。static int i表示该变量只可以应用在本文件,而int i可以应用在除甲的文件外所有文件。

四、 extern

代表外部函数或者外部变量。这个东西在外部定义的。
甲在A.C文件定义了一个变量int i;
乙在B.C文件想使用甲定义的变量int i;如果直接使用报错,没有定义;如果乙在B.C文件引用 int i,并加extern,写作extern int i后在赋值就不报错,这样写的作用是“声明”int i是在其他文件定义过的一个文件。如果在B.C里直接写int i,报重复定义错误。或者甲单独写一个A.H,A.H文件特别声明了extern int i,乙使用时先include A.H,然后再使用也是不报错的。

猜你喜欢

转载自blog.csdn.net/qq_35318223/article/details/131643762