auto,static,const,extern,volatile,register

auto关键字用于声明变量的生存期为自动,auto修饰的是自动类型的变量,对于局部变量默认就是自动类型的变量,如果没有赋初值它的值就是随机值。

static  修饰的变量或者函数有如下特点:

  1. static修饰的局部变量,可以延长变量的生命周期(不会被多次初始化)
  2. static修饰的全局变量或者函数只能在本文件中使用(私有privacy)

const(const修饰的全局变量在.ro段存储,const修饰的局部变量在栈区存储。)

        被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

extern

        extern修饰的变量或者函数没有在当前没有中,而是在其他文件中。

volatile

        作用是每次都从内存中获取最新的值,不从缓存中取值。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1). 并行设备的硬件寄存器(如:状态寄存器);

2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables);

3). 多线程应用中被几个任务共享的变量;

register

       register修饰的变量是寄存器类型的变量,如果不加register修饰变量是在内存上存储的。

加了register变量就在寄存器中存储,寄存器类型的变量在运算的时候比内存上的变量运

算的效率更高。在一个处理器上寄存器的个数是有限制的一般40个左右。寄存器类型的变量

不能取地址,因为它没有在内存中存储。

问题:

一个参数既可以是const还可以是volatile吗?解释为什么。

         是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

一个指针可以是volatile 吗?解释为什么。

        是的。因为指针和普通变量一样,有事也有变化程序的不可控性。常见例:子中断服务子程序修改一个指向一个buffer的指针时,必须用volatile来修饰指针。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在C语言中,autostaticextern、registerconstvolatile是用来定义变量和函数的存储类别和属性的关键字。\[2\] auto是默认的存储类别,用于定义自动变量,它的生命周期与所在的代码块相同。static用于定义静态变量,它的生命周期在程序运行期间都存在,但作用域仅限于所在的代码块。extern用于声明外部变量或函数,它表示该变量或函数是在其他文件中定义的。register用于定义寄存器变量,它的值存储在寄存器中,以提高访问速度。const用于定义常量,一旦被赋值后就不能再修改。volatile用于定义易变的变量,每次都会从内存中获取值,而不是从缓存中获取值,适用于对硬件寄存器的访问、多线程中访问全局变量和中断中访问非自动类型的变量。\[3\] 关键字constvolatile的使用可以提高程序的可读性和可靠性,因此在编写程序时,我们应该根据需要合理地使用这些关键字。 #### 引用[.reference_title] - *1* *2* [C中的autostatic、registerexternconst和volitate](https://blog.csdn.net/m0_70888041/article/details/128286925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [c语言中的六个存储类型:auto register static extern const volatile](https://blog.csdn.net/a2998658795/article/details/125958396)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值