简单介绍C语言中auto,register,static,const,volatile,extern等几个关键字的作用

几个关键字作用:

1)auto
    这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。

(2)register
    这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。

(3)static

   这个关键字主要有以下两个作用:

   1、改变变量的生存周期

               void fun (void)

              {

                       static int flag = 0;

                       flag++;

               }

          注:这个flag定义为静态int型变量,在内存中的存储位置为静态区,初始化为0,并且第一次初始化以后再次调用fun函数不会再初始化。它的生存周期不会随着fun函数的消亡而消失,只有当整个程序结束才消失,也可以认为是main函数结束后才消亡。


    2、改变函数或者变量等的作用域

       这里我就简单用文字描述,当我们在做一个项目的时候,两个程序员一个写了1.c,另外一个写了2.c。他们都定义了全局变量flag或者全局函数fun等,当这个项目链接两个文件的时候,编译器就会报错为重复定义,这时就需要在函数前面加static关键字,使它的作用域改变为只在当前文件中可见。不可在其他文件中用extern访问。

 (4)const
     被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。它可以修饰函数的参数、返回值,甚至函数的定义体。

    例如:strcat(char *dest, const char *src):这个函数是链接两个字符串,让后面字符串src链接到前面dest字符串后面,我们可以改变字符串dest,但是不可改变src,所以在后面的参数中嫁了const,让其不可被函数改变,如果改变了编译器会提示你修改了一个const变量。

 (5)volatile
     表明某个变量的值可能在外部被改变,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。它可以适用于基础类型如:int,char,long......也适用于C的结构和C++的类。当对结构或者类对象使用volatile修饰的时候,结构或者类的所有成员都会被视为volatile.
该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程。

    例如:

          int i = 5;

         printf("%d_%d\n", i++, ++i);  这个输出表达式如果是按照我们想的,从从右到左结合,应该是输出6_6,但是这里输出的是 6_7,这就是编译器给我们优化了。

         如果在定义 i的时候前加了volatile

         volatile int i = 5;这时就会按照我们的要求去运算,结果为6_6,编译器不会去优化,会去慎重的取i的值。

(6)extern
        extern 意为“外来的”···它的作用在于告诉编译器:有这个变量,它可能不存在当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个Dll的输出中

       作用是:

           调用其他文件的中函数或者变量,其他文件中如果没有我们需要的函数或者变量的话会报ld错误,文件链接错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值