C语言关键字(部分)

1)非常见:auto、register、volatile、goto

2)存储相关:const、extern、register、volatile、static、auto、signed、unsigned

3)数据类型:char、short、int、float、long、double、struct、union、enum、void

4)逻辑控制:if、else、for、while、do、break、continue、return、default、switch、case、goto

5)特殊用途:sizeof、typedef

 

auto:

auto在定义变量的时候可以自动检测变量类型。——>int a=1,等同于auto a=1;   float b=1.11;等同于 auto b=1.11; 

auto修饰局部变量,表示这个变量是自动局部变量,自动局部变量分配在栈上。(既然是分配在栈上,说明他如果不初始化的话那么值就是随机的,全局变量的值初始化是0)

平时定义局部变量时就是定义的auto的,只是省略了auto关键字而已。auto的局部变量其实就是默认定义的普通的局部变量。

register :register关键字不常用,作用就是:用register修饰的变量编译器会尽量把它分配子寄存器中。(平时分配的一般变量都是在内存中)。分配在寄存器中用法是一样的,但是读写效率会高很多。所以说register修饰的变量用在那种变量被反复高频率的使用,通过改善这个变量的访问速度可以极大的提升程序运行效率。register编译器只能承诺尽量将register修饰的变量放在寄存器中,但是不保证一定放在寄存器中。主要原因是因为寄存器数量有限,不一定有用。(有些编译器会自动优化,就是把变量复制到cpu寄存器中。)


extern :

extern主要用来声明全局变量,声明的目的主要是在a.c中定义全局变量整个工程中都能使用该变量。(一个工程中同样的全局变量只能有一个。)


static :

用来修饰局部变量,形成静态局部变量。静态局部变量存储在 全局区(静态区),局部变量存储在栈区(跟函数参数值一样)。作用域是所在函数。

用来修饰全局变量,形成静态全局变量。静态全局变量存储在 全局区(静态区)。作用域是自身所在文件。(全局变量作用域是整个工程)

 

volatile:

一个定义为volatile 的变量是说这变量可能会被意想不到地改变。优化器在用到这个变量时必须每次都小心地重新读取内存中的值,而不是使用保存在寄存器里的备份值。 如果将将变量加上volatile,则编译器对此变量的读写操作不会被优化 。

volatile 用途:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;(如:标志变量)
2、多任务环境下各任务间共享的标志应该加volatile
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;

const:

const 修饰的变量具有只读的属性而且是全局的。const修饰的可以取地址,就是说指针可以指向它。而#define 定义的常亮是不能取地址的。

code:

标准C语言中没有。在单片机中code可以把常数和表格之类的放到ROM中去以节省RAM。(rom只读内存)

goto:从一下列子中可以看出 goto 可以跳出多重循环,跳到标号位置程序继续执行。但goto在程序太大了的时候,如果程序出错,很难调试找出错误,要慎用goto。

int  main()
 {    
    int i = 1;   
    while(1) 
    {    
         printf("在while(1)里\n");     
        while(i++)
        {       
          printf("i = %d\n",i);       
          if(i > 3)            
          {                
            goto TiaoChu;       
          }        
       }    
    }
 TiaoChu:   
  printf("程序结束\n");   
  return 0; 
}  

 

posted @ 2018-08-22 16:22  梦里梦见梦不见的  阅读(161)  评论(0编辑  收藏  举报