C中的6种关键字及其用法

时间:2021-07-25 23:14:11

1、register关键字
       请求编译器尽可能的将变量保存在CPU内部寄存器中,省去CPU从内存中抓取变量的时间,提高了运行效率。
   为什么是尽可能而不是全部将变量保存在CPU中:由于
CPU内部寄存器中空间有限,不可能将所有变量都放入其中,所以只能将一些经常访问的变量放入。
   使用注意事项:①
register只能修饰局部变量,不能修饰全局变量和函数。全局变量会被多个进程访问,如果只有当前进程用register修饰,那么只有当前进程知道被register                                       修饰的变量保存在哪里。
                 ②不能用取地址来获取变量的地址,因为这个变量是保存在寄存器中的,取地址获取的是内存的地址

                 ③register修饰的变量一定是CPU可以接受的变量

 

2、Static关键字
       staticke可以修饰变量和函数,⑴static在修饰变量时,既可以修饰局部变量又可以修饰全局变量

                                 ①在修饰局部变量时是在延长他的生命周期,在程序整体运行结束时在释放

                                 ②在修饰全局变量时,该变量只能在本文件中被访问,其他文件中不可以访问

                               ⑵static修饰的函数与全局变量类似,只能在本文件中被调用,其他文件不可以调用。Static修饰的变量保存在数据区的静态数据区,若没有

                                 进行初始化,则初始化默认为0
       什么时候用static关键字:当你想要将一个变量在程序执行完成后释放,可以使用static修饰,用全局变量就比较危险,因为其它函数也可以进行操作,而用static修饰的变

                          量只有该函数自己可以操作,起到保护的作用

 

3、Const关键字
       const修饰的是只读变量,不可以通过该变量名来修改里面的内容,但是可以通过该空间修改里面的内容。因此可以总结出一句话:const离谁近,谁不可以做改变。使

    用const修饰变量时,一定要对变量进行初始化。且const一般用在修饰函数形参,避免在函数运行过程中修改实参的值。
        例:const int num = 5
                int *p = &num
              (*p++;  //正确
                num++;   //错误表达,因为constnum近,所以不可以做改变

4、Extern关键字
       这是一个申明变量,申明这个变量时在其他文件定义的,但是要加申明的类型,而且,extern只能申明全局变量,在函数内部的局部变量不可访问

5、Typedef关键字
       给变量重起名字,提高代码的移植性,可以使复杂的变量名变成简单的变量名,提高编写效率,起到对变量的注释的作用

6、Volatile关键字
       volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile

    键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

        一般说来,volatile用在如下的几个地方:
         ①中断服务程序中修改的供其它程序检测的变量需要加volatile

        ②多任务环境下各任务间共享的标志应该加volatile 

         ③存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义 

     另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能

     依靠硬件的良好设计了。



注:还有其他一些关键字后续会补充