C语言之常用关键字的详解


***register  :修饰寄存器变量  (只能修饰局部变量,不能修饰全局变量)

 

  内部寄存器结构:

   1:冯·诺依曼结构

   2:哈佛结构

 

作用:请求编译器尽可能将变量保存在CPU内部寄存器里面,从而省去CPU从内存

      中提取数据的时间,从而提高执行效率。

 

尽可能的解释:CPU内存寄存器资源有限,把频繁出现的变量放在寄存器中。

 

使用注意事项:

(1)register不能修饰全局变量,全局变量可以被多个进程访问,当当前进程声明为

       Register类型时,只有当前进程可以访问。

(2):不能用取地址去获取register,变量保存在寄存器中,而取地址是获取内存地址。

(3)register所修饰的变量一定是CPU所接受的数据类型。

 

 

*****static

(1)static修饰局部变量叫静态局部变量。

      作用:延长局部变量的生命周期,使程序结束再释放。

 

(2)static修饰全局变量:  全局变量只在本文件可见,其他文件不可见,不可访问。

 

(3)static修饰函数:函数只能在本文件被调用,不能再其他文件调用。

 

(4)static修饰函数:函数只能在本文件被调用,不能在其他文件调用。

 

 使用说明:

 1):当static修饰局部变量时,可以改变局部变量的生命周期。

  

 2):只想让全局变量在本文件被调用,不想其他文件调用。

 3):static修饰函数的作用:只想让函数在本文件被调用,不想其他文件调用。

****const

   const修饰的变量叫只读变量

 

 只读变量:

变量的空间可变,但不能通过变量名来修饰变量的值 

 如下:

      int num = 5;

      const  int  *p = #                            const 离那个变量近,那个变量不能自加

      p++;                    即(*P),不能自加

      (*p)++

      num++;

      const  int  *p = &num    不能通过p修改所指向的空间

      int *const  p = &num      不能通过p修改对应的空间

 

使用注意事项:

  1:用const修饰变量时,对变量做初始化,否则后面此变量不可改

 

  2:修饰函数形参,在函数实现过程中,避免修改实参的值。

 

***extern

 extern关键字:只能用于扩展 没有被static关键字修饰的全局变量。默认情况下全局变量只能在定义它的文件中使用(从定义该全局变量开始到所在文件的文件尾),但如 果在另一个文件中将这个变量声明为外部变量,那么这个变量的作用域将被扩展到另外一个文件中。也可以在定义全局变量之前声明该变量,从而在文件中可以在定 义该全局变量前使用该全局变量。

extern关键字:在定义函数时如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。

        在文件中要调用其他文件中的外部函数,则需要在文件中用extern声明该外部函数,然后就可以使用。

 

外部函数-用 extern声明

★用extern声明的外部函数可供其他文件调用.一般没有任何声明 的函数都是外部函数.

e.g. extern int fun(int a,int b)

★在需要调用此函数的文件中.用extern声明所用的函数是外部函数.

 

***typedef

  作用:

  1:重命名:提高代码的移植性。

  2:方便我们定义变量,把复杂的变量定义成简单的名字。

  3:给数据类型重命名,起到对变量名注释的作用。

***volatile

 volatile的本意是易变的因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用volatile,则编译器将对所声明的语句进行优化。(简洁的说就是:volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)

 

使用注意事项:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值